2

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

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

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

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

4

2 回答 2

3

有没有办法在不枚举的情况下检查 IQueryable 对象是否为空?

不,那是不可能的。

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

如果这样做真的很重要,那么最好将整个结果集拉到内存中,比如说一个列表,进行检查,然后返回一个IEnumerable而不是一个IQueryable.

那,或者只是不做检查。

于 2013-10-24T14:34:24.837 回答
0

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

于 2013-10-24T14:30:06.833 回答