Ausdruck.Lambda und Query Generation zur Laufzeit, einfachste "Wo" Beispiel

Ich versuche zu generieren, eine einfache Lambda-Ausdrucks zur Laufzeit, ohne Glück... so etwas wie dieses:

var result = queryableData.Where(item => item.Name == "Soap")

Hier ist mein Beispiel-Klasse und eine Vorrichtung queryable:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
}

IQueryable<Item> queryableData = ...;

Dann Generiere ich ein lambda-Ausdruck zur Laufzeit richtigen code folgt:

//"item" in "item =>..."
var item = Expression
    .Parameter(typeof(Item), "item");

//property of my item, this is "item.Name"
var prop = Expression
    .Property(item, "Name");

//then "Soap" in '... => item.Name=="Soap"'
var value = Expression.Constant("Soap");

//equality expression "==" in my primer
var equals = Expression.Equal(prop, value);

//then lambda
var lambda = Expression.Lambda<Func<Item, bool>>(equals, item);

//and here are the results    
var results = queryableData.Where(lambda);

Großen Dank dtb für die Beratung!

InformationsquelleAutor der Frage CodeAddicted | 2011-11-29

Schreibe einen Kommentar