排序我編寫了這個代碼,IQueryable<T>
列sortColumn
列。我想擴展它,以便具有BirthDate
列的值等於DateTime.Today
的值的條目將排在第一位,但我無法找到或想到如何完成這項工作。使用Linq.Expressions.Expression
public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string sortColumn, bool asc)
{
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, sortColumn);
var exp = Expression.Lambda(prop, param);
string method = asc ? "OrderBy" : "OrderByDescending";
Type[] types = new[] { q.ElementType, exp.Body.Type };
var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
return q.Provider.CreateQuery<T>(mce);
}
參見:http://stackoverflow.com/questions/298725/multiple-order-by-in-linq – RBZ
這會工作,但後來我不能使用參數「sortColumn」來排序需要的任何列,除非我使用很多if(){} s。 – Catalin
首先,你不應該在這裏返回'IOrderedQueryable'嗎?其次,你不能創建另一個擴展'IOrderedQueryable'的副本,而不是使用'ThenBy'和'ThenByDescending'作爲'Queryable'方法的'IQueryable'嗎? – SPFiredrake