我有一個通用的排序方法,我們使用並需要擴展它能夠排序不同類型的列表。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