Je passe de SQL à Linq et j'ai besoin d'aide. Je teste à la fois Linq-to-SQL et Linq-to-Entities. Je veux essayer les deux pour décider laquelle me convient le mieux. Votre aide est appréciée. Merci
Quelle est la syntaxe correcte (dans vb.net si possible) pour sélectionner la valeur de date minimale dans une table?
Dim mydata As New DataClassesDataContext
Dim myresult = From cv In mydata.T1s
Select cv.DATE1, cv.Date2, cv.Datex
myresult=Dump()
J'ai essayé j'ai essayé d'utiliser
Select amin=cv.DATE1.Min(), amax=cv.Date1.Max(), bmin=cv.Date2.Min(), etc....
donne cette erreur 'Min' is not a member of 'Date'
.
Les données sur lesquelles je veux obtenir les valeurs min et max sont ci-dessous:
IOrderedQueryable<VB$AnonymousType_0<DateTime,DateTime>> (16 items)
Date1 Date2
17/Oct/09 12:00:00 AM 23/Oct/09 12:00:00 AM
10/Jan/09 12:00:00 AM 15/Feb/09 12:00:00 AM
27/Mar/09 12:00:00 AM 27/Mar/09 12:00:00 AM
30/May/09 12:00:00 AM 30/May/09 12:00:00 AM
25/Jan/09 12:00:00 AM 25/Mar/09 12:00:00 AM
01/Nov/09 12:00:00 AM 01/Nov/09 12:00:00 AM
21/Feb/09 12:00:00 AM 04/Mar/09 12:00:00 AM
02/Mar/09 12:00:00 AM 09/Mar/09 12:00:00 AM
07/Jul/09 12:00:00 AM 07/Jul/09 12:00:00 AM
27/Sep/09 12:00:00 AM 27/Sep/09 12:00:00 AM
05/Nov/09 12:00:00 AM 05/Nov/09 12:00:00 AM
15/Apr/09 12:00:00 AM 15/Apr/09 12:00:00 AM
08/Jun/09 12:00:00 AM 08/Jun/09 12:00:00 AM
07/Jul/09 12:00:00 AM 07/Jul/09 12:00:00 AM
30/Jul/09 12:00:00 AM 30/Jul/09 12:00:00 AM
04/Nov/09 12:00:00 AM 04/Nov/09 12:00:00 AM
Maintenant résolu, mais ce n'est pas la solution parfaite, il semble que j'avais besoin de faire une requête distincte pour chaque colonne qui nécessite une fonction d'aggreagate:
Sub Main
Dim mm = (From cv In T1s
Select Datez = (cv.Date1)).Min()
Dim mm1 = (From cv In T1s
Select Datez = (cv.Date1)).Max()
Dim mm2 = (From cv In T1s
Select Datez = (Date2)).Min()
Dim mm3 = (From cv In T1s
Select Datez = (Date2)).Max()
mm.dump()
mm1.dump()
mm2.dump()
mm3.dump()
End Sub
Les résultats sont ci-dessous
10/Jan/09 12:00:00 AM
05/Nov/09 12:00:00 AM
15/Feb/09 12:00:00 AM
05/Nov/09 12:00:00 AM
Cela devrait fonctionner pour vous
//Retrieve Minimum Date
var MinDate = (from d in dataRows select d.Date).Min();
//Retrieve Maximum Date
var MaxDate = (from d in dataRows select d.Date).Max();
(De ici )
Si vous recherchez la date la plus ancienne (valeur minimale), vous devez trier puis prendre le premier article retourné. Désolé pour le C #:
var min = myData.OrderBy( cv => cv.Date1 ).First();
Ce qui précède retournera l'objet entier. Si vous souhaitez simplement renvoyer la date:
var min = myData.Min( cv => cv.Date1 );
En ce qui concerne la direction à prendre, concernant Linq to Sql vs Linq to Entities, il n'y a vraiment pas beaucoup de choix de nos jours. Linq à Sql n'est plus en cours de développement; Linq to Entities (Entity Framework) est le chemin recommandé par Microsoft de nos jours.
De Microsoft Entity Framework 4 en action (version MEAP) par Manning Press:
Et l'avenir de LINQ to SQL?
Ce n'est pas un secret que LINQ to SQL est inclus dans le Framework 4.0 pour des raisons de compatibilité. Microsoft a clairement déclaré que Entity Framework est la technologie recommandée pour l'accès aux données. À l'avenir, il sera fortement amélioré et étroitement intégré à d'autres technologies, tandis que LINQ to SQL ne sera que maintenu et peu évolué.
dim mydate = from cv in mydata.t1s
select cv.date1 asc
datetime mindata = mydate[0];