ChatGPT解决这个技术问题 Extra ChatGPT

Enumerable.Empty<T>() 等效于 IQueryable

当一个方法返回 IEnumerable<T> 而我没有要返回的东西时,我们可以使用 Enumerable.Empty<T>()

返回 IQueryable<T> 的方法是否有与上述等效的方法


T
Tim Cooper

也许:

Enumerable.Empty<T>().AsQueryable();

我知道,目前这是唯一简单、直接和肮脏的 ;-) 解决方案
不幸的是,这不会创建一个实际的空 IQueryable,这意味着它会导致例如 Union 查询被分解为多个查询而不是一个。
@NetMage 是的。更令人困惑的是,您的代码不会在 Union 所在的行中中断,但可能是在您在此之后尝试某些操作时。这个答案被接受并投票,但它可能会产生很大的误导。 @Sunny 请考虑编辑您的答案。这个问题的答案对我有帮助:Enumerable.Empty<T>().AsQueryable(); This method supports the LINQ to Entities infrastructure and is not intended to be used directly from your code
P
Paul Fleming

Enumerable.Empty<T>().AsQueryable(); 应该这样做。


b
bdukes

试试return new T[0].AsQueryable();


@Nauman-您实际上创建了一个 [empty] T 数组-实际上没有创建 T 的新对象。
P
Protector one

假设您有一个名为 resultIQueryable<T>

return result.Take(0);

J
Josh

我建议不要使用 alejandrobog 的回答,因为这仍然会使用内存来创建一个空数组。

Array.Empty<T>().AsQueryable();

或者

Enumerable.Empty<T>().AsQueryable();

是首选。 Array.Empty 将分配一个静态类型数组,因此只创建一个 T 的空数组,并且在所有 Empty 可查询对象之间共享。


Array.Empty<T> 仅在 .NET Framework 4.6 之后可用。对于早期版本,您可以使用 new object[0].Cast<T>()