LINQ IQueryable 检查是否为空而不枚举
本文关键字:枚举 IQueryable 检查 是否 LINQ | 更新日期: 2023-09-27 18:36:40
这听起来像是一个荒谬的问题,但我在任何地方都找不到直接的答案。
我有一个从 LINQ 到 SQL 查询返回IQueryable<MyObject>
对象的函数。 我知道 IQueryable 对象使用惰性求值,所以我不想在返回对象之前使用 .Count
枚举它。 但是,我想在将其传回调用方之前检查它是否为"null"或空。 原因是,如果查询不返回任何结果,则意味着调用方传递了无效参数,因此我想抛出异常。
这个问题:没有匹配项时 LINQ 结果?似乎没有为我的这个问题版本提供直接的答案。
我的问题是:有没有办法在不枚举的情况下检查 IQueryable 对象是否为空? 检查default(IQueryable<T>)
能解决问题吗?
有没有办法在不枚举的情况下检查 IQueryable 对象是否为空?
不,这是不可能的。
确定查询是否至少有一个结果的唯一方法是实际执行查询。 您不需要迭代整个结果集,但需要尝试获取第一项,这意味着将查询发送到数据库,让它执行它,然后发送响应。
如果这样做真的很重要,那么最好只是将整个结果集拉入内存中,比如说列表,进行检查,然后返回IEnumerable
而不是IQueryable
。
那个,或者干脆不做检查。
在返回 LINQ 语句
之前,您始终可以在 LINQ 语句中使用.Any()
。这样,如果您的语句不返回任何内容,您将获得一个 null 值。