这可能听起来像一个荒谬的问题,但我无法在任何地方找到答案。
我有一个从LINQ-to-SQL查询返回IQueryable<MyObject>
对象的函数。我知道IQueryable对象使用惰性求值,所以我不希望在返回对象之前使用.Count
枚举它。但是,我想在将其传递回调用者之前检查它是否为“null”或空。原因是如果查询没有返回结果,则表示调用者传递了无效参数,因此我想抛出异常。
这个问题:LINQ results when there are no matches?似乎没有为我的这个问题提供直接的答案。
我的问题是:有没有办法检查IQueryable对象是否为空而不枚举它?检查default(IQueryable<T>)
是否可以解决问题?
答案 0 :(得分:3)
有没有办法检查IQueryable对象是否为空而不枚举它?
不,那是不可能的。
确定查询是否至少有一个结果的唯一方法是实际执行查询。您不需要迭代整个结果集,但是您需要尝试获取第一个项目,这意味着将查询发送到数据库,让它执行它,然后发送响应。
如果您真的很重要,那么最好只将整个结果集拉入内存,列表,检查,然后返回IEnumerable
而不是{{1 }}
那,或者只是不做检查。
答案 1 :(得分:0)
在返回之前,您总是可以在LINQ语句中使用.Any()
。这样,如果您的语句没有返回任何内容,您将获得空值。