Ich möchte Linq-Abfrage erstellen, die dynamisch genug sein sollte, um alle Eigenschaften einer bestimmten Klasse zu erhalten und Ausdrucksbaum für "wo" und "select" in linq aufzubauen.Wie Linq-Abfrage in dynamische Abfrage konvertieren?
Es gibt ein Domänenmodell, das aus bool-Eigenschaften und numerischen Eigenschaften besteht. Numerische Eigenschaften werden für Bereiche verwendet.
Beispiel:
Domain Model
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; }
}
Eingangs Modell:
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; }
}
einfache Abfrage:
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 };
}
ich Abfrage erstellen möchten, die durch Domänenmodell gehen und ich Ich werde den Ausdrucksbaum aufbauen und er wird gegen die Eingaben laufen, die zur Laufzeit mit der Klasse 'LinqDynamic' als Eingabeparameter bereitgestellt werden.
Ich habe mehr als 10 Boolean und 30 Bereichsauswahl, und die Anzahl der Boolean und Range Selctors ändert sich je nach Projektanforderungen, so ist es Kopfschmerzen, die Abfrage jedes Mal zu ändern. Ich möchte es dynamisch machen, so dass es zu einer Änderung Agnostiker sein werde
ich über https://msdn.microsoft.com/en-us/library/bb397951.aspx gelesen und einige andere Links, die ich hier nicht wegen des Mangels an Rufpunkte
noch schreiben kann ich bin nicht sicher, wie man es erreicht