LINQ检查FirstOrDefault是否为null并使用它

时间:2012-08-23 17:03:51

标签: c# linq entity-framework

我正在编写一个在FirstOrDefault查询后使用OrderBy的查询,该查询应检查它是否先为空,然后使用其中的一些数据。有没有比写这样更好的方法:

int count = db.Items.Count(i => 
          i.Assignments.OrderByDescending(a => 
                a.DateAssigned).FirstOrDefault() != null
          && 
          i.Assignments.OrderByDescending(a =>
                a.DateAssigned).FirstOrDefault().DateReturned == null)

此代码的作用是有些项目有很多分配,我按日期进行最新分配,然后检查它是否存在,然后在属性(DateReturned)上运行条件。如你所见,这个查询很长,我的大多数查询看起来都像这样,我首先检查null然后使用它们的属性对它运行第二个查询。有没有更好的方法呢?

3 个答案:

答案 0 :(得分:8)

只需致电.Any(a => a.DateReturned == null),检查是否有符合条件的物品。

如果您只想查看最新的作业,请在.Take(1)之前添加.Any()

答案 1 :(得分:1)

我的看法:

int count = 
itemsQuery.Select(i => i.Assignments.OrderByDescending(a => a.DateAssigned))
          .Count(i => i.FirstOrDefault() != null &&  
                      i.First().DateReturned == null);

答案 2 :(得分:0)

您可以将结果放在变量中,以避免两次做同样的事情:

int count = itemsQuery.Count(i => {
  var f = i.Assignments.OrderByDescending(a => a.DateAssigned).FirstOrDefault();
  return f != null && f.DateReturned == null;
});