我在下面有一个查询,但是想知道是否有更简洁的方法来实现它。
var query = Context.Alerts
.Where(a => a.AlertsDismisseds.Where(d => d.AlertID == a.AlertID)
.Count() == 0)
.Select(a => a);
如果AlertsDismisseds表中没有,我希望从表中选择所有警报。
提前致谢。
答案 0 :(得分:3)
var query = Context.Alerts
.Where(a => !Context.AlertsDismissed.Any(d => d.AlertID == a.AlertID))
答案 1 :(得分:0)
正如Femaref所说,您可以使用:
var query = Context.Alerts
.Where(a => !Context.AlertsDismissed.Any(d => d.AlertID == a.AlertID));
原因如下:
Any(predicate)
如果IEnumerable中的任何项都传递谓词(并且会尽快执行),则返回true,因此这比Count(predicate) > 0
更好(这将枚举整个序列)。
选择()执行投影,将IEnumerable<Input>
转换为IEnumerable<Output>
,因此Select(a => a)
实际上什么都不做。