1

linqで特定のクラスのすべてのプロパティを取得し、linqで 'where'と 'select'の式ツリーを構築するのに十分な動的なlinqクエリを作成します。linqクエリを動的クエリに変換するにはどうすればよいですか?

boolプロパティと数値プロパティで構成されるドメインモデルがあります。範囲に数値プロパティが使用されます。

例:

ドメインモデル

public class MakeMeReal 
    { 
     public bool isA { get; set; } 
     public bool isB { get; set; } 

     public int Type1 { get; set; } 
     public double Type2 { get; set; } 

     public double Type3 { get; set; } 
     public string Type4 { get; set; } 

    } 

入力モデル:

public class LinqDynamic 
    { 
     public bool isA { get; set; } 
     public bool isB { get; set; } 

     public int lowerRangeForTyp1 { get; set; } 
     public int UpperRangeForTyp1 { get; set; } 

     public double LowerRangeForType2 { get; set; } 
     public double UpperRangeForType2 { get; set; } 
    } 

単純なクエリ:私はドメインモデルを通過しますクエリを構築したい

public void query(LinqDynamic dynamicInput) 
     { 
      SampleDbContext db = new SampleDbContext(); 

      var result = from m in db.MakeMeReal 
         where m.isB == dynamicInput.isB && m.isA == dynamicInput.isA && 
           m.Type1 >= dynamicInput.lowerRangeForTyp1 && m.Type1 < dynamicInput.UpperRangeForTyp1 && 
           m.Type2 >= dynamicInput.LowerRangeForType2 && m.Type1 < dynamicInput.UpperRangeForType2 

         select new { a = m.Type1, b = m.Type2, c = m.Type3, d = m.Type4 }; 

     } 

そして私式ツリーを構築し、実行時に入力パラメータとして 'LinqDynamic'クラスを使用して提供される入力に対して実行されます。

私は10個以上のブーリアンと30個のレンジセレクタを持っています。ブーリアンとレンジセレクタの数はプロジェクトの要求に応じて変化し続けますので、毎回クエリを変更するのは頭痛です。それはどんな変化

にとらわれないだろうように、私は私はまだ、私はおよそhttps://msdn.microsoft.com/en-us/library/bb397951.aspxと私は原因評判ポイントの欠如

にここに投稿することはできませんいくつかの他のリンクを読んで、それを動的にしたいのですがそれを達成する方法がわかりません

答えて

0

クエリに述語を使用すると助けになるかもしれません。あなたに役立つNuGetパッケージがあります。ドキュメントでは、これを行う方法について説明します。 LINQKit here

関連する問題