【问题标题】:If a linq query returns empty does it return null?如果 linq 查询返回空,它是否返回空?
【发布时间】:2014-02-03 07:29:24
【问题描述】:

我有以下 linq 查询:

     vm.logs = (from l in db.ActivityLogs
                   orderby l.Time
                   select l).Take(2);

如果 db 表为空,会返回 null 吗?

如果不是,我如何检测查询是否返回了任何信息?

【问题讨论】:

  • OP -- 认为值得将您的问题标记为 a dupe,或者您是否认为它在某些方面已经足够不同了?

标签: linq entity-framework


【解决方案1】:

它将返回一个没有元素的IEnumerable<ActivityLog>

要检查是否有任何元素,请使用Any() 方法:

if(!logs.Any())
{
   Console.WriteLine("No elements found.");
}

还请注意,在您编写它时,vm.logs 将被延迟评估,也就是说,在使用之前不会从数据库中获取它。如果您先执行.Any(),然后再访问查询的内容,则会在数据库中执行两个查询。为避免这种情况,请通过在查询中添加 ToList() 来实现(强制执行查询):

 vm.logs = (from l in db.ActivityLogs
               orderby l.Time
               select l).Take(2).ToList();

【讨论】:

  • 注意这里,如果两个都没有返回; select l).Take(2).ToList(); 它将是 null 而不是空集,所以这会崩溃。
  • @Ostmeistro 不,如果没有元素,Take(2) 返回一个空集。尝试例如Enumerable.Empty<int>().Take(2) - 它将返回一个空的 IEnumerable<int>
猜你喜欢
  • 2014-06-04
  • 2022-08-09
  • 1970-01-01
  • 2020-12-08
  • 2018-03-05
  • 2021-03-18
  • 2021-11-20
  • 2019-10-13
  • 1970-01-01
相关资源
最近更新 更多