我正在编写一个在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然后使用它们的属性对它运行第二个查询。有没有更好的方法呢?
答案 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;
});