在调用ToList()或Count()之前检查LINQ Where()是否返回任何内容

Fra*_*rme 2 c# linq

我想知道我是否做了类似的事情:

var results = source.Where(c => c.Name == "Whatever");
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在调用Count()或ToList()之前检查查询是否返回了什么?我知道Where()懒惰地执行.

返回的数据集可能很大,调用上述方法非常耗时.

结果永远不会是NULL ...

谢谢.

Ser*_*rvy 6

既然你只想知道获得完整的结果集是否值得,那就永远不值得去做.

这里只有两种情况:

  1. 您的查询没有结果.在这种情况下,检查有多少结果的查询将花费相同的执行时间,并返回与真实查询完全相同的信息.在这种情况下,你什么也得不到(但也没有任何损失).

  2. 您的查询至少有一个结果.在这种情况下,您需要返回并执行真实查询.最终的结果是你花了尽可能多的时间没有先检查,但你也有额外的成本检查是否有结果.该检查意味着往返数据库,这是一个非常重要的时间.

如果您想知道查询是否包含任何项目,那么它是可能的.(只需使用Any扩展方法.)但是,如果您不需要知道实际项目是什么,这将是有益的,无论结果Any是什么.

值得注意的是,正如lazyberezovsky在他的回答中所做的那样,你还需要考虑你打电话后查询结果发生变化的竞争条件Any.