ストーリーはどのように
私はIRepositoryパターン化実装をからかっていたIQueryableオブジェクトにラムダ式を呼び出します。すべて正常ですが、私はUpdateManyメソッドに問題があります。
オリジナルメソッド
元のメソッドは、Entity Frameworkのクエリを使用しています。 更新()。もちろんそれは、(DBコンテキストを期待して、私は与えられたタイプのちょうどリストDBのコンテキストを、使用しないような方法
嘲笑このようないくつかの
public virtual void UpdateMany(IQueryable<T> query, Expression<Func<T, T>> entityInitializer)
{
query.Update(entityInitializer);
this.DbContext.SaveChanges();
}
、のIQueryableのためのエンティティの拡張メソッドは動作しません。例外は多くの賢明な情報なしでスローされます)。私のメソッドは同じ引数を受け取りますが、それらを解析する方法はわかりません。
例式
.UpdateMany(x.IsActive, new TestStuff { IsActive = false });
はしたがって、基本的に、リポジトリ内のすべてのアクティブなTestStuffため、falseに設定するのisActive。それは、特定のオブジェクト
TLにもちろん を拘束すべきではありません。DRは はそれにラムダ式を呼び出す方法、クエリを持って?
質問lambdaを使用できない場合は、単純なForEachを試してみて、if inを追加してアクティブになっているかどうかを制御できますか?私はあなたがリスト(IEnumerable)のものを持つことができると仮定しています – Raskayu
この特定のケースではうまくいくはずですが、実装されたメソッド呼び出しを受け入れる必要がありますので、何とか両方の式を解析して、テキストでは本当に望ましくない –
* Entity Frameworkのquery.Update()* AFAIKそこから来るそのような標準的なEFメソッドはありません? –