Ich möchte linq-Methode auf iqueryable mit einem Ausdrucksbaum von Funktion ausführen, wo ich Name der linq Methode und Name der Eigenschaft überließe. Aber meine Beispielmethode funktioniert nur mit zugeordneten Eigenschaften. Es wird eine Ausnahme ausgelöst, wenn ich beispielsweise versuche, die maximal berechnete Eigenschaft zu finden.Entity Framework führt eine Abfrage mit nicht zugeordneten Eigenschaften aus. Ausdrucksbaum
Meine Klassen:
public partial class Something
{
public int a { get; set; }
public int b { get; set; }
}
public partial class Something
{
public int calculated { get { return a * b; } }
}
Probenmethode:
public static object ExecuteLinqMethod(IQueryable<T> q, string Field, string Method)
{
var param = Expression.Parameter(typeof(T), "p");
Expression prop = Expression.Property(param, Field);
var exp = Expression.Lambda(prop, param);
Type[] types = new Type[] { q.ElementType, exp.Body.Type };
var mce = Expression.Call(typeof(Queryable),Method,types,q.Expression,exp);
return q.Provider.Execute(mce);
}
Warum glauben Sie, dass der Ausdrucksbaum Ihnen erlauben kann, etwas zu tun, das nicht vom EF-Abfrageanbieter unterstützt wird? –
Ich brauche eine universelle Methode, um Max, Min, Summe usw. von gemappten und nicht gemappten Eigenschaften zu finden. Mit dem angegebenen Namen der Funktion und dem Namen der Eigenschaft als Parameter dieser Methode. Es kann durch einen Ausdrucksbaum oder auf andere Weise erfolgen. –
Warum finden Sie dann nicht zuerst den "anderen Weg" und fragen Sie dann, falls nötig, nach Hilfe für den Ausdrucksbaum. Ich denke, das Hauptproblem besteht darin, festzustellen, ob das Feld zugeordnet ist oder nicht. Und selbst wenn Sie das tun, da es keine Möglichkeit gibt zu wissen, was die berechnete Eigenschaft verwendet, ist die einzige Möglichkeit, sie auszuführen, die Ausführung gegen 'IEnumerable '. –