У меня есть общий метод сортировки, который мы используем, и его необходимо расширить, чтобы сортировать списки разных типов.Expression.Lamda с известным типом?
Когда я перехожу в один список, код для создания sortExpression не будет работать, потому что элементы списка наследуются, и, таким образом, родительский тип отражается в T по сравнению с реальным типом, который передается в o.
Любые идеи, как я могу сделать эту работу с пройденным типом?
public static List<T> Sort<T>(IQueryable<T> list, int sortOrder, string sortColumn, Type o)
{
var param = Expression.Parameter(o);
MemberExpression sortProperty = Expression.Property(param, sortColumn);
String propertyType = o.GetProperty(sortColumn).PropertyType.ToString();
switch (propertyType)
{
case "System.String":
{
var sortExpression = Expression.Lambda<Func<T, String>>(sortProperty, param);
return sortOrder == 0 ? list.OrderBy(sortExpression).ToList() : list.OrderByDescending(sortExpression).ToList();
}
case "System.Int32":
{
var sortExpression = Expression.Lambda<Func<T, Int32>>(sortProperty, param);
return sortOrder == 0 ? list.OrderBy(sortExpression).ToList() : list.OrderByDescending(sortExpression).ToList();
}
case "System.Decimal":
{
var sortExpression = Expression.Lambda<Func<T, Decimal>>(sortProperty, param);
return sortOrder == 0 ? list.OrderBy(sortExpression).ToList() : list.OrderByDescending(sortExpression).ToList();
}
// etc...
}
}
Совершенные. Я не могу принять в качестве ответа из-за проблем с системой. Попытаемся сделать это сегодня вечером. – MB34