複数の列を使用してクエリを注文しようとしています。以下は私のコードとパラメータ値です。エラーが発生した2つの式を追加しようとする行でエラーが発生します。OrderByのラムダ式を結合する
The binary operator Add is not defined for the types 'System.String' and 'System.Single'.
ご協力いただければ幸いです!あなたが外側のレベルではなく、内側のレベルにOrderBy
/ThenBy
でチェーンにあなたの表現を必要とする
sortColumn = "table1.column1,table2.column1,column3"
public static IQueryable<T> OrderBy<T>(this IQueryable<T> query, string sortColumn, string direction) {
string methodName = string.Format("OrderBy{0}", direction.ToLower() == "asc" ? "" : "descending");
ParameterExpression parameter = Expression.Parameter(query.ElementType, "p");
MemberExpression memberAccess = null;
LambdaExpression orderByLambda = null;
foreach (var fields in sortColumn.Split(',')) {
memberAccess = null;
foreach (var property in fields.Split('.')) {
memberAccess = MemberExpression.Property(memberAccess ?? (parameter as Expression), property);
} if (orderByLambda == null) {
orderByLambda = Expression.Lambda(memberAccess, parameter);
} else {
orderByLambda = Expression.Lambda(Expression.Add(orderByLambda.Body, Expression.Lambda(Expression.Invoke(Expression.Lambda(memberAccess, parameter), parameter), parameter).Body), parameter);
}
}
MethodCallExpression result = Expression.Call(
typeof(Queryable),
methodName,
new[] { query.ElementType, memberAccess.Type },
query.Expression,
Expression.Quote(orderByLambda));
return query.Provider.CreateQuery<T>(result);
}
使用 'ThenBy'た後、あなたの最初の' OrderBy' –
おそらく、あなたは、[並べ替え/ ThenBy/ThenByを呼び出すべきであるだけではなく、単一のOrderByの呼び出しを使用しようとしている:ここではどのように? –
ありがとう、私はThenByもオプションですが、私はそれが可能だと信じていますが、構文にこだわると思うので、これを実際にやりたいのです。 – ecasper