1

我正在编写一个在查询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 然后使用它们的属性对其运行第二个查询。有没有更好的方法来做到这一点?

4

3 回答 3

8

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

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

于 2012-08-23T17:07:51.403 回答
1

我的看法:

int count = 
itemsQuery.Select(i => i.Assignments.OrderByDescending(a => a.DateAssigned))
          .Count(i => i.FirstOrDefault() != null &&  
                      i.First().DateReturned == null);
于 2012-08-23T17:12:06.040 回答
0

您可以将结果放入变量中以避免重复执行相同的操作:

int count = itemsQuery.Count(i => {
  var f = i.Assignments.OrderByDescending(a => a.DateAssigned).FirstOrDefault();
  return f != null && f.DateReturned == null;
});
于 2012-08-23T17:13:53.357 回答