【问题标题】:IEnumerable can't convert to IQueryableIEnumerable 无法转换为 IQueryable
【发布时间】:2017-11-16 19:20:14
【问题描述】:

到目前为止,我有一个 .net 4.7 库,我在其中以这种模式使用 IQuery:

IQueryable<MyType> myIQueryable = mySource;

if(paramIsNew != null)
{
    myIQueryable = myIQueryable.where(x => x.IsNew == paramIsNew);
}

等等更多的参数和条件。

但是,现在我正在尝试将此库转换为 .net 标准库,但我收到无法将 IEnumerable 转换为 IQueryable 的错误,它存在并且显式转换。

我没有真正看到问题以及如何解决它。

【问题讨论】:

  • @PatrickHofman 为什么你认为它应该是IEnumerable?这将在内存中执行操作,而不是在底层数据源中执行,这可能更可取。
  • 这个错误出现在哪一行?查看该代码,我看到的最有可能的选项是 mySource 是 IEnumerable&lt;MyType&gt;,这会导致错误...可能不是,但您需要确认详细信息。
  • myIQueryable.where(x =&gt; x.IsNew == paramIsNew); 不应该编译或者它正在调用您编写的自定义方法,C# 区分大小写,实际方法是Where 而不是where,所以请显示Minimal, Complete, and Verifiable example它实际上使用更正的大写进行编译或包含您的自定义 where 扩展方法。此外,MCVE 需要包括您如何获得mySource
  • @PatrickHofman 代码中is没有强制转换,所以不存在的强制转换显然不可能无效。

标签: c# ienumerable iqueryable


【解决方案1】:

这是因为 Queryable 类和特定于可查询的扩展方法(如 Where)不是默认的 .NET Standard 库的一部分。所以你使用Enumerable.Where 扩展方法,它返回IEnumerable。您的 myIQueryableIQueryable 类型,因此您收到编译器错误。你需要安装System.Linq.Queryablenuget包,然后你的代码编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多