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

时间:2013-10-24 14:27:43

标签: c# linq linq-to-sql lazy-evaluation

这可能听起来像一个荒谬的问题,但我无法在任何地方找到答案。

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

这个问题:LINQ results when there are no matches?似乎没有为我的这个问题提供直接的答案。

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

2 个答案:

答案 0 :(得分:3)

  

有没有办法检查IQueryable对象是否为空而不枚举它?

不,那是不可能的。

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

如果您真的很重要,那么最好只将整个结果集拉入内存,列表,检查,然后返回IEnumerable而不是{{1 }}

那,或者只是不做检查。

答案 1 :(得分:0)

在返回之前,您总是可以在LINQ语句中使用.Any()。这样,如果您的语句没有返回任何内容,您将获得空值。