web-dev-qa-db-fra.com

Comment sélectionner les valeurs de date Min et Max dans Linq Query

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
37
Erwin1

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 )

93
pjama

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é.

36
Metro Smurf
dim mydate = from cv in mydata.t1s
  select cv.date1 asc

datetime mindata = mydate[0];
0
Praneeth