Creating a sort function for a generic list
Posted
by Andrey
on Stack Overflow
See other posts from Stack Overflow
or by Andrey
Published on 2010-04-15T15:34:16Z
Indexed on
2010/04/15
15:53 UTC
Read the original article
Hit count: 184
I have a method for sorting generic lists by the object fields:
public static IQueryable<T> SortTable<T>(IQueryable<T> q, string sortfield, bool ascending)
{
var p = Expression.Parameter(typeof(T), "p");
if (typeof(T).GetProperty(sortfield).PropertyType == typeof(int?))
{
var x = Expression.Lambda<Func<T, int?>>(Expression.Property(p, sortfield), p);
if (ascending)
q = q.OrderBy(x);
else
q = q.OrderByDescending(x);
}
else if (typeof(T).GetProperty(sortfield).PropertyType == typeof(int))
{
var x = Expression.Lambda<Func<T, int>>(Expression.Property(p, sortfield), p);
if (ascending)
q = q.OrderBy(x);
else
q = q.OrderByDescending(x);
}
else if (typeof(T).GetProperty(sortfield).PropertyType == typeof(DateTime))
{
var x = Expression.Lambda<Func<T, DateTime>>(Expression.Property(p, sortfield), p);
if (ascending)
q = q.OrderBy(x);
else
q = q.OrderByDescending(x);
}
// many more for every type
return q;
}
Is there any way I can collapse those ifs to a single generic statement?
The main problem is that for the part
Expression.Lambda<Func<T, int>>
I am not sure how to write it generically.
© Stack Overflow or respective owner