Ich habe es aufgegeben zu versuchen, den Unterschied zwischen diesen beiden Fragen zu erklären und habe versucht, diese Frage zu löschen, aber das System lässt mich nicht. Es tut mir leid, dass ich alle Zeit verschwendet habe.Wie wird eine Entity-Eigenschaft nach Name in einer Variablen ohne eine Erweiterungsmethode gespeichert?
Aber es ist definitiv ein Unterschied zwischen diesen beiden Dingen, die jede Frage einzeln adressiert:
Entity.OrderBy("field name") //<-- Extension method
und
Expression<Func<TE,TK>> myvar;
Entity.OrderBy(myvar) //<-- Variable holding an Expression
Ich versuche, eine Funktion zu erstellen einen String-Namen zu konvertieren in einen Lambda-Ausdruck, der auf eine Entity-Eigenschaft verweist, ohne eine Erweiterungsmethode zu verwenden. Das von uns verwendete Repository akzeptiert Lambdas, daher können wir keine Extension-Methoden senden.
// LinqPad for testing
void Main()
{
string prop = "sku";
// We can store data type of property in variable, but how
// do we convey that value in the <> brackets?
Expression<Func<[Entity type],[Property type]>> orderby;
orderby = Me.GetOrder<Product,[How do I get SKU type here?]>("sku");
Product.OrderBy(orderby).Skip(10).Take(10).Dump();
}
public static class Me
{
public static Expression<Func<TE, TK>> GetOrder<TE,TK>(
string propertyName) where TE: class
{
//Create x=>x.PropName
var propertyInfo = typeof(TE).GetProperty(propertyName);
ParameterExpression arg = Expression.Parameter(typeof(TE), "x");
MemberExpression property = Expression.Property(arg, propertyName);
var selector = Expression.Lambda<Func<TE,Object>>(property,
new ParameterExpression[] { arg });
return selector;
}
}
@ Dr.Zim Was bekommen Sie, wenn Sie die Konvertierung nicht haben? Ich sehe nicht, warum die Konvertierung notwendig ist –
@AaronRoberts ohne die Konvertierung, erhält Entity Framework den Job der Umwandlung der Int in ein Objekt, das es nicht versteht. –
@Backs Ich habe die obere Bearbeitung hinzugefügt, um diese Frage von der anderen zu unterscheiden, im Wesentlichen geht es nicht darum, eine Abfrage zu erweitern, sondern den orderby-Parameter in einer Variablen zu speichern (damit ich diesen Parameter an ein Repository übergeben kann). –