ienumerableとiqueryableの両方の方法()方法に供給するためにfuncが必要です
-
29-09-2019 - |
質問
次のように定義されたFUNCがあります。
Func<Foo, bool> IsSuperhero = x => x.WearsUnderpantsOutsideTrousers;
私はこのようなienumerablesをクエリすることができます:
IEnumerable<Foo> foos = GetAllMyFoos();
var superFoos = foos.Where(IsSuperhero);
しかし、iQueryableの方法に同じFuncを提供しようとすると、次のようになります。
「ソースタイプSystem.Collections.Generic.INumerable System.linq.iqueryableに変換することはできません。」
どうしたの? iNumerableとiQueryableの両方の仕様として機能するFUNCをどのように定義できますか?
解決
IQueryable
linqメソッドがかかります 表現木, 、通常の代表者ではありません。
したがって、変更する必要があります func
anに変数 Expression<Func<Foo, bool>>
, 、 このような:
Expression<Func<Foo, bool>> IsSuperhero = x => x.WearsUnderpantsOutsideTrousers;
anで同じ変数を使用するには IEnumerable<T>
, 、電話する必要があります AsQueryable()
また Compile()
, 、 このような:
IQueryable<Foo> superFoos = foos.AsQueryable().Where(IsSuperhero);
IEnumerable<Foo> superFoos = foos.Where(IsSuperhero.Compile());
所属していません StackOverflow