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

Posted

技术标签:

【中文标题】Enumerable.Empty<T>() 等效于 IQueryable【英文标题】:Enumerable.Empty<T>() equivalent for IQueryable 【发布时间】:2011-02-11 02:15:07 【问题描述】:

当一个方法返回IEnumerable&lt;T&gt;而我没有返回任何东西时,我们可以使用Enumerable.Empty&lt;T&gt;()

返回IQueryable&lt;T&gt;的方法是否有与上述等效的方法

【问题讨论】:

【参考方案1】:

也许:

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。【参考方案2】:

Enumerable.Empty&lt;T&gt;().AsQueryable(); 应该这样做。

【讨论】:

【参考方案3】:

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

【讨论】:

@Nauman - 你实际上创建了一个 [empty] T 数组 - 实际上没有创建 T 的新对象。【参考方案4】:

假设您有一个名为resultIQueryable&lt;T&gt;

return result.Take(0);

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

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

以上是关于Enumerable.Empty<T>() 等效于 IQueryable的主要内容,如果未能解决你的问题,请参考以下文章

Enumerable.Empty<T> 需要显式转换

Enumerable.Empty<T>().AsQueryable();此方法支持 LINQ to Entities 基础结构,不打算直接从您的代码中使用

Generation 操作

发布后如何填写下拉列表

为啥与空列表连接时返回列表但与新列表连接时不返回?

在 mvc 中加载 2 个下拉列表的更好方法