LINQ IQueryable 检查是否为空而不枚举

JNY*_*ger 5 c# linq lazy-evaluation linq-to-sql

这听起来像是一个荒谬的问题,但我在任何地方都找不到直接的答案。

IQueryable<MyObject>我有一个从 LINQ-to-SQL 查询返回对象的函数。我知道 IQueryable 对象利用惰性求值,因此我不想.Count在返回对象之前通过使用来枚举它。但是,我想在将其传递回调用者之前检查它是否不是“null”或空。原因是,如果查询没有返回结果,则意味着调用者传递了无效参数,因此我想抛出异常。

这个问题:没有匹配项时的 LINQ 结果?似乎没有为我的这个问题版本提供直接答案。

我的问题是:有没有办法在不枚举 IQueryable 对象的情况下检查它是否为空?检查是否可以default(IQueryable<T>)解决问题?

Ser*_*rvy 4

有没有一种方法可以检查 IQueryable 对象是否为空而不枚举它?

不,那是不可能的。

确定查询是否至少有一个结果的唯一方法是实际执行查询。您不需要迭代整个结果集,但需要尝试获取第一项,这意味着将查询发送到数据库,让它执行它,然后发送响应。

如果确实有必要这样做,那么最好将整个结果集拉入内存,例如列表,进行检查,然后返回一个IEnumerable而不是一个IQueryable.

那,或者干脆不做检查。