Comment sélectionner des valeurs de date Min et Max dans la requête Linq

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 lequel me convient le mieux. Votre aide est très appréciée. Merci

Quelle est la syntaxe correcte (en vb.net si possible) pour sélectionner la date minimale d'un tableau?

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 Que je veux obtenir min et max sur est 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 une solution parfaite, il semble que j'ai dû faire une requête séparée pour chaque colonne qui nécessite une fonction agrégée :

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 en dessous de

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
35
demandé sur Erwin1 2011-03-05 03:56:52

3 réponses

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(); 

(ici)

86
répondu pjama 2011-03-05 01:02:53

si vous cherchez la date la plus ancienne (valeur minimum), vous triez puis prenez 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 voulez juste la date de retour:

var min = myData.Min( cv => cv.Date1 );

en ce qui concerne la direction à prendre, re: Linq à Sql vs Linq aux Entities, il n'y a pas vraiment beaucoup de choix ces jours-ci. Linq to Sql n'est plus développé; Linq to Entities (Entity Framework) est le chemin recommandé par Microsoft jour.

Microsoft Entity Framework 4 en Action (MEAP release) par Manning Press:

Qu'en est-il de L'avenir de LINQ à SQL?

ce N'est pas un secret pour LINQ SQL est inclus dans le cadre 4.0 pour des raisons de compatibilité. Microsoft a clairement indiqué que l'Entité Le cadre est recommandé la technologie d'accès aux données. Dans le l'avenir, il sera fortement améliorée et étroitement intégré à d'autres technologies tandis que LINQ à SQL seulement être maintenu et peu évoluer.

35
répondu Metro Smurf 2011-03-05 01:53:22
dim mydate = from cv in mydata.t1s
  select cv.date1 asc

datetime mindata = mydate[0];
0
répondu Praneeth 2011-03-05 01:02:41