質問

次のように定義された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をどのように定義できますか?

役に立ちましたか?

解決

IQueryablelinqメソッドがかかります 表現木, 、通常の代表者ではありません。

したがって、変更する必要があります 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());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top