Linq To Sql vb.net的帮助

时间:2009-05-08 18:44:13

标签: vb.net linq-to-sql

我有一张桌子,我需要根据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)

显然他们不工作。我甚至关闭了吗?任何想法都将不胜感激。

提前致谢。

3 个答案:

答案 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值)。