我有一张桌子,我需要根据Id选择记录。我只想在日期字段上返回具有Max(Date)的记录。我该怎么做?
在SQL Server中我使用此
SELECT * FROM dch
WHERE EffectiveDate = (SELECT MAX(EffectiveDate) FROM dch
WHERE ID = 99) AND ID = 99
我怎样才能在Linq中这样做。不幸的是,这个应用程序是用VB.NET编写的,因为我们以这种方式继承它。
我正在尝试这些
Dim qry = (From dch In db.dch _
Where dch.Dealer.Equals(Dealer) _
Select dch.EffectiveDate).Max()
或
Dim qry = (From dch In db.dch _
Where dch.Dealer.Equals(Dealer) _
Select ).Max(dch.EffectiveDate)
显然他们不工作。我甚至关闭了吗?任何想法都将不胜感激。
提前致谢。
答案 0 :(得分:2)
请原谅我的VB语法中的任何错误,我是(大多数)C#程序员。
Dim item = db.dch.Where( Func(d) d.ID == 99 ) _
.OrderByDescending( Func(d) d.EffectiveDate )_
.Take(1)
它实际上将实现为
select top 1 <...columns...>
from dch
where ID == 99
order by EffectiveDate desc
我认为这等同于您的查询。
答案 1 :(得分:0)
我没有具体回答你的问题。这更像是一个人教鱼类场景......但是在学习Linq时,给这个网站添加书签并经常访问它。 101 Linq VB Samples
Your specific answer is here under Max about halfway down.
该网站将解决80%的新LINQ问题。
为了记录,根据你的描述,我认为这就是你想要的。
dim results = (from d in db.dch where d.ID == 99 select d.EffectiveDate).Max()
当然,这将仅返回最高生效日期。
答案 2 :(得分:0)
在第二个查询中,您必须将lambda表达式作为参数传递给Max扩展方法:
Dim qry = (From dch In db.dch _
Where dch.Dealer.Equals(Dealer) _
).Max(Function (item) item.EffectiveDate)
编辑:再看看你的问题,我意识到我并没有真正回答它,因为你需要做第二次查询来获得实际结果。此外,您尝试的第一个查询应该与我的查询完全相同(获取最大的EffectiveDate值)。