如果linq查询返回空,它是否返回null?

时间:2014-02-03 07:29:24

标签: linq entity-framework

我有以下linq查询:

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

如果db表为空,则返回null?

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

1 个答案:

答案 0 :(得分:7)

它将返回没有元素的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();