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

本文关键字:枚举 IQueryable 检查 是否 LINQ | 更新日期: 2023-09-27 18:36:40

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

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

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

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

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

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

不,这是不可能的。

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

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

那个,或者干脆不做检查。

在返回 LINQ 语句

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