3

Func を次のように定義しています。

Func<Foo, bool> IsSuperhero = x => x.WearsUnderpantsOutsideTrousers;

次のように IEnumerables をクエリできます。

IEnumerable<Foo> foos = GetAllMyFoos();
var superFoos = foos.Where(IsSuperhero);

しかし、IQueryable の Where メソッドに同じ Func を指定しようとすると、次のようになります。

「ソース タイプ System.Collections.Generic.IEnumerable を System.Linq.IQueryable に変換できません。」

どうしたの?IEnumerable と IQueryable の両方の仕様として機能する Func を定義するにはどうすればよいですか?

4

1 に答える 1

3

IQueryableの LINQ メソッドは、通常のデリゲートではなくExpression Treesを取ります。

したがって、次のように、func変数をに変更する必要があります。Expression<Func<Foo, bool>>

Expression<Func<Foo, bool>> IsSuperhero = x => x.WearsUnderpantsOutsideTrousers;

で同じ変数を使用するには、次のようにorIEnumerable<T>を呼び出す必要があります。AsQueryable()Compile()

IQueryable<Foo> superFoos = foos.AsQueryable().Where(IsSuperhero);
IEnumerable<Foo> superFoos = foos.Where(IsSuperhero.Compile());
于 2010-08-19T15:12:02.987 に答える