我有以下linq查询:
vm.logs = (from l in db.ActivityLogs
orderby l.Time
select l).Take(2);
如果db表为空,则返回null?
如果不是,我如何检测查询是否确实返回了任何信息?
答案 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();