【问题标题】:Grabbing Just The Top Entry From A LINQ Query仅从 LINQ 查询中获取顶部条目
【发布时间】:2011-03-03 13:10:10
【问题描述】:

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

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

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 循环。烂代码!完成同一件事的“最佳实践”方法是什么?

【问题讨论】:

    标签: c# linq foreach


    【解决方案1】:

    致电First()
    例如:

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

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

    【讨论】:

      【解决方案2】:
      var first = Result.First();
      

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

      【讨论】:

        【解决方案3】:
        var LastDate = DB.Table.OrderBy(a => a.Date).FirstOrDefault();
        

        【讨论】:

          【解决方案4】:

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

          [edit] -- 哦,突然冲到那里回答相同的问题:)

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 他不想要IEnumerable
            【解决方案6】:

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

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

            【讨论】:

            • 只有当你先写.Cast<DateTime?>
            【解决方案7】:

            如果您要查找最新日期,可以使用“Max”函数(我相信 linq2sql 会转换为 SQL MAX 操作):

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

            【讨论】:

              猜你喜欢
              • 2014-12-12
              • 2015-07-22
              • 1970-01-01
              • 1970-01-01
              • 2023-02-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多