如何在Linq查询中选择最小和最大日期值

Erw*_*in1 37 linq linq-to-sql

我正在从SQL迁移到Linq,我需要一些帮助.我正在测试Linq-to-SQL和Linq-to-Entities.我想尝试两者来决定哪一个最适合我.非常感谢您的帮助.谢谢

从表中选择最小日期值的正确语法(在vb.net中,如果可能)是什么?

Dim mydata As New DataClassesDataContext
Dim myresult = From cv In mydata.T1s
                       Select cv.DATE1, cv.Date2, cv.Datex
myresult=Dump()
Run Code Online (Sandbox Code Playgroud)

我试过试过用

Select amin=cv.DATE1.Min(), amax=cv.Date1.Max(), bmin=cv.Date2.Min(), etc....
Run Code Online (Sandbox Code Playgroud)

给出了这个错误'Min' is not a member of 'Date'.

我想要获得最小值和最大值的数据如下:

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
Run Code Online (Sandbox Code Playgroud)

现在解决了,但这不是一个完美的解决方案,似乎我需要对每个需要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
Run Code Online (Sandbox Code Playgroud)

结果如下

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
Run Code Online (Sandbox Code Playgroud)

pja*_*ama 93

这应该适合你

//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(); 
Run Code Online (Sandbox Code Playgroud)

(从这里)


Met*_*urf 36

如果您要查找最早的日期(最小值),则需要排序,然后再返回第一个项目.抱歉C#:

var min = myData.OrderBy( cv => cv.Date1 ).First();
Run Code Online (Sandbox Code Playgroud)

以上将返回整个对象.如果您只想要返回日期:

var min = myData.Min( cv => cv.Date1 );
Run Code Online (Sandbox Code Playgroud)

关于哪个方向,重新:Linq to Sql vs Linq to Entities,这些天真的没什么选择.Linq to Sql不再开发; Linq to Entities(实体框架)是微软最近的推荐路径.

来自Manning Press的Microsoft Entity Framework 4 in Action(MEAP发布):

LINQ to SQL的未来如何?

出于兼容性原因,将LINQ to SQL包含在Framework 4.0中并不是一个秘密.Microsoft已明确声明Entity Framework是推荐的数据访问技术.在未来,它将得到强有力的改进并与其他技术紧密集成,而LINQ to SQL只能维护并且几乎没有进化.