Dies ist mein Code, der Eigenschaft T
Objekt von property
Zeichenfolge generiert.Linq: OrderBy dynamische geschachtelte Eigenschaft, die null sein kann
// returning property as lambda from string
public static Func<T, object> GetPropertyFunc<T>(string property)
{
try
{
var parameter = Expression.Parameter(typeof(T), "obj");
Expression body = parameter;
foreach (var member in property.Split('.'))
{
body = Expression.PropertyOrField(body, member);
}
// conversion from Toutput to object
Expression converted = Expression.Convert(body, typeof(object));
return Expression.Lambda<Func<T, object>>(converted, parameter).Compile();
//return (Func<T, object>)Expression.Lambda(body, parameter).Compile();
}
catch (Exception ex)
{
throw ex;
}
}
Als nächstes, ich benutze es hier:
var orderParamFunc = PagedListHelper.GetPropertyFunc<T>(pagedListModel.OrderParameter.ParameterName);
IOrderedEnumerable<T> finalQuery = pagedListModel.OrderParameter.OrderAscending ? whereQuery.OrderBy(orderParamFunc) : whereQuery.OrderByDescending(orderParamFunc);
Es ist gut funktioniert, wenn Eigenschaft nicht null ist. Ich habe Problem mit Beispiel:
property = "Customers.Dicts.DictValue"
in T Objekt Customers
Eigenschaft null sein kann entweder Customers.Dicts
Eigenschaft sein kann.
Was soll ich zu GetPropertyFunc
Methode hinzufügen, um Prüfungen von Null zu machen? Ich weiß nicht, wo und wie man die Bedingung != null
oder .HasValue
setzen kann.
Ausnahme: "Falsche Argumenttypen". – Staly
yep ich das korrigiert und fügte einen vollständigen Test –
Kann nicht sehen, dass Sie diese Zeilen behoben, immer noch ein Fehler. – Staly