我想知道我是否做了类似的事情:
var results = source.Where(c => c.Name == "Whatever");
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在调用Count()或ToList()之前检查查询是否返回了什么?我知道Where()懒惰地执行.
返回的数据集可能很大,调用上述方法非常耗时.
结果永远不会是NULL ...
谢谢.
既然你只想知道获得完整的结果集是否值得,那就永远不值得去做.
这里只有两种情况:
您的查询没有结果.在这种情况下,检查有多少结果的查询将花费相同的执行时间,并返回与真实查询完全相同的信息.在这种情况下,你什么也得不到(但也没有任何损失).
您的查询至少有一个结果.在这种情况下,您需要返回并执行真实查询.最终的结果是你花了尽可能多的时间没有先检查,但你也有额外的成本检查是否有结果.该检查意味着往返数据库,这是一个非常重要的时间.
如果您想知道查询是否包含任何项目,那么它是可能的.(只需使用Any扩展方法.)但是,如果您不需要知道实际项目是什么,这将是有益的,无论结果Any是什么.
值得注意的是,正如lazyberezovsky在他的回答中所做的那样,你还需要考虑你打电话后查询结果发生变化的竞争条件Any.