【发布时间】:2013-09-16 08:55:11
【问题描述】:
我想用 Linq 对多列进行排序
我使用this link作为参考,用于按列名对单列进行排序。
我正在尝试使用此方法对具有列名的多个列进行排序。
这是我目前正在做的事情
public static IQueryable<T> OrderByMultipleFields<T>(this IQueryable<T> q, Dictionary<string, bool> fieldsToSort)
{
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, fieldsToSort.First().Key);
var exp = Expression.Lambda(prop, param);
string methodAsc = "OrderBy";
string methodDesc = "OrderByDescending";
string method=string.Empty;
Type[] types = new Type[] { q.ElementType, exp.Body.Type };
var mce = q.Expression;
int count = 0;
foreach (var fieldName in fieldsToSort)
{
method = fieldName.Value ? methodAsc : methodDesc;
prop = Expression.Property(param, fieldName.Key);
exp = Expression.Lambda(prop, param);
types = new Type[] { q.ElementType, exp.Body.Type };
if (count == 0) {
mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
} else {
mce = Expression.Add(mce, Expression.Call(typeof(Queryable), method, types, q.Expression, exp));
}
methodAsc = "ThenBy";
methodDesc = "ThenByDescending";
count++;
}
return q.Provider.CreateQuery<T>(mce);
}
我收到以下错误 -
没有为类型定义二元运算符 Add 'System.Linq.IOrderedQueryable
1[SortDemo.Data.User]' and 'System.Linq.IOrderedQueryable1[SortDemo.Data.User]'。
实现此目的的正确方法是什么,或者是否有任何替代方法或方法。 谢谢。
【问题讨论】:
-
那么你为什么试图打电话给
Expression.Add?
标签: c# sql linq sorting entity-framework-4