从LINQ查询中抓取顶部条目

时间:2010-06-14 14:13:10

标签: c# linq foreach

我基本上有很多设计糟糕的代码来做一些事情,我敢肯定,可以做得更优雅。

我要做的是从数据库表中获取最后一个日期。

var Result = 
from a in DB.Table
orderby a.Date descending
select new {Date = a};

foreach(var Row in Result)
{
LastDate = Row.Date.Date;
break;
}

基本上,有一个foreach循环只能运行一次。蹩脚的代码!什么是实现同样事情的“最佳实践”方式?

7 个答案:

答案 0 :(得分:13)

var first = Result.First();

如果结果集为空,则会抛出异常;你可以使用FirstOrDefault(),如果结果集为空,它将返回null。

答案 1 :(得分:8)

致电First() 例如:

LastDate = 
    (from a in DB.Table
     orderby a.Date descending
     select a.Date
    ).First();

如果表格可能为空,请拨打FirstOrDefault(),这将返回DateTime.MinValue而不是抛出异常。

答案 2 :(得分:3)

var LastDate = DB.Table.OrderBy(a => a.Date).FirstOrDefault();

答案 3 :(得分:1)

FirstOrDefault()作为奖励,你可以使用LastOrDefault()......你猜对了......

[edit] - 哦,突然冲到那里用同样的答案:)

答案 4 :(得分:0)

您也可以致电Result.Take(1) Take(1)First()之间的区别在于First返回单个对象,Take返回类型的IEnumerable。

答案 5 :(得分:0)

如果Date是引用类型,那么您可以考虑合并运算符。

var LastDate = Result.FirstOrDefault()??新的日期();

答案 6 :(得分:0)

如果您正在尝试查找最新日期,可以使用“Max”功能(我相信linq2sql将转换为SQL MAX操作):

var maxdate = DB.Table.Max(a => a.Date)