2

こんな表現があります

(a,b) => a.Id == b.Id

LINQ to Entities クエリで使用したい

T GetSingle(IRepository<T> repository, Func<T,T,bool> predicate, T entity)
{
   return repository.GetAll().Single(e => predicate(e, entity))
}

しかし、これにより例外が発生します: LINQ 式ノード タイプ 'Invoke' は LINQ to Entities ではサポートされていません
b.IdId = 5のエンティティのインスタンスは、新しい式(a) => a.Id == 5を生成できます。
そして、最後の式は LINQ to Entities で問題ありません。

この記事を見つけて読みまし
たラムダ式のパラメーターを置き換えます
http://www.codeproject.com/Articles/143096/Parameter-Substitution-within-Expression-Trees
しかし、まだ私のタスクを解決する方法がわかりません

では、指定された式を動的に変換するにはどうすればよいですか?

4

2 に答える 2

3

メソッドを次のように変更してみませんか。

T GetSingle(IRepository<T> repository, Expression<Func<TSource, Boolean>> predicate)
{
   return repository.GetAll().Single(predicate);
}

これの代わりに:

GetSingle(myRepository, (a,b) => a.Id == b.Id, myEntity);

あなたはこれを行うことができるはずです:

GetSingle(myRepository, a => a.Id == myEntity.Id);
于 2013-06-07T13:44:10.703 に答える