C# IEnumerable can';t转换为IQueryable

C# IEnumerable can';t转换为IQueryable,c#,ienumerable,iqueryable,C#,Ienumerable,Iqueryable,到目前为止,我有一个.net 4.7库,在此模式下我使用IQuery: IQueryable<MyType> myIQueryable = mySource; if(paramIsNew != null) { myIQueryable = myIQueryable.where(x => x.IsNew == paramIsNew); } IQueryable myIQueryable=mySource; if(paramIsNew!=null) { myIQuery

到目前为止,我有一个.net 4.7库,在此模式下我使用IQuery:

IQueryable<MyType> myIQueryable = mySource;

if(paramIsNew != null)
{
    myIQueryable = myIQueryable.where(x => x.IsNew == paramIsNew);
}
IQueryable myIQueryable=mySource;
if(paramIsNew!=null)
{
myIQueryable=myIQueryable.where(x=>x.IsNew==paramIsNew);
}
等等,以获取更多参数和条件

然而,现在我试图将这个库转换为.net标准库,但是我得到的错误是我无法将IEnumerable转换为IQueryable,它存在并显式转换


我看不出真正的问题以及如何解决它。

这是因为
Queryable
类和其他特定于Queryable的扩展方法(如
Where
)不是默认的.NET标准库的一部分。因此您使用
Enumerable.Where
扩展方法,该方法返回
IEnumerable
。您的
myIQueryable
属于
IQueryable
类型,因此您会遇到编译器错误。您需要安装
System.Linq.Queryable
nuget包,然后使用compile编译您的代码。

@patrickhoffman为什么认为它应该是
IEnumerable
?这将在内存中执行操作,而不是在底层数据源中执行操作,这可能更可取?查看该代码,我看到的最有可能的选项是mySource是导致错误的
IEnumerable
。。。可能不是,但您需要确认详细信息。或者
myiquikeryable.where(x=>x.IsNew==paramIsNew)
不应编译,或者它正在调用由您编写的自定义方法,C#区分大小写,实际方法是
Where
而不是
Where
,因此请显示一个实际使用更正的大写字母编译的方法,或者包含您的自定义
Where
扩展方法。此外,MCVE还需要包括如何获取
mySource
@patrickhoffman代码中没有强制转换,因此不存在的强制转换显然不能无效。