は、動的LINQクエリを作成するには、サポートライブラリが必要それかExpression Tree
参照してそれを自分でやって:Entity Framework Dynamic Query Library
免責事項:私はこのライブラリプロジェクトEval-Expression.NET
の持ち主だあなたは、評価し、コンパイル、実行時にコードを実行することができます。
は、ライブラリは、動的LINQの拡張メソッドが含まれてい
ウィキ:Eval Dynamic LINQ
例
// using Z.Expressions; // Don't forget to include this.
// The filterQuery must use the C# syntax
string filterQuery = "x.Id == 1 && x.Number = 2";
IQueryable<Publication> query = db.Publications.Include(i => i.Product);
query = query.Where(x => filterQuery);
EDIT:回答サブ質問
グレートが、どのように私がすることができます製品別にフィルタリングする
エンティティフレームワークは、インクルードメソッドのフィルタをサポートしていません。私はEntity Framework Plus
参照の所有者だ:
// Extension method must be registered, otherwise the library cannot be aware of which extension method exists!
EvalManager.DefaultContext.RegisterExtensionMethod(typeof (QueryIncludeFilterExtensions));
string where1 = "x.Id == 1 && x.Number == 2";
string where2 = "y.Id == 3";
var left2 = ctx.Publications
.Where(x => where1)
.Execute<IQueryable<Publication>>("IncludeFilter(x => x.Product.Where(y => " + where2 + "))")
.ToList();
:両方のライブラリを組み合わせることで
EF+ Query IncludeFilter
、あなたが希望する結果を達成することができます
しかし、EFは+
免責行います
このソリューションをお試しになる場合は、ダウンロードしてくださいe最新版のEval-Expression.NET。私たちはあなたのシナリオを試して見つけた問題を数分前に修正しました。
EDIT2:回答サブ質問
ここでは、私はあなたをお勧めするものです。
私たちのライブラリなしでクエリを試してから、それを動的に試してみてください。
コンパイルエラーや本当にやりたいことを簡単に見つけることができます。
たとえば、初期の問題を正しく理解していない可能性があり、不要なIncludeFilterを提案した可能性があります。私はあなたが複数の製品をフィルタリングしたいと思っていました。ただし、パブリケーションごとに1つのプロダクトしかないように見えるため、Where句のメソッドは明らかに存在しません。
多分これはあなたが探しているより多くのものです:
string where1 = "x.Id == 1 && x.Number == 2 && x.Product.Id == 3";
var left2 = ctx.Publications
.Include(x => x.Product)
.Where(where1)
.ToList();
だから、要するに、あなたは後に動的にそれを使用する方法を知っています(ダイナミックなし)、それをハードコーディングしてクエリを試してみてください。
申し訳ありませんが、これは動作しません。私は "Include path式は型に定義されたナビゲーションプロパティを参照する必要があります。参照ナビゲーションプロパティには点線のパスを使用し、コレクションナビゲーションプロパティにはSelect演算子を使用してください。 –
私はコードを修正しました。それはうまく動作するはずです。 – agfc
いいえ!それは動作していません。 IdとNumberがPublicationsの属性であり、CategoryIdがProductsの属性であるとします。 Id = 1とNumber = 2のPubicationsを見つけて、CategoryId(製品の)が3の製品を含むようにしたいとします。あなたの例は私に与えられます: '出版物'タイプの 'CategoryId'プロパティもフィールドもありません –