什么是干净的LINQ查询来获取没有子项的项目?

时间:2011-07-22 14:31:13

标签: linq linq-to-entities chaining

我在下面有一个查询,但是想知道是否有更简洁的方法来实现它。

var query = Context.Alerts
                .Where(a => a.AlertsDismisseds.Where(d => d.AlertID == a.AlertID)
                .Count() == 0)
                .Select(a => a);

如果AlertsDismisseds表中没有,我希望从表中选择所有警报。

提前致谢。

2 个答案:

答案 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)实际上什么都不做。