我有一个小问题,我将尝试详细解释。
在我的系统上,我有一个使用 EF 4.1 的通用存储库。一切都很好,但是在某些情况下我遇到了一个问题,我需要对一些查询进行动态 orderBy。
我通过参数收到一个代表我班级字段的“字符串”,以执行 orderBy(如“id”或“description”)
部分代码:
public class SomeClass
{
public int id { get; set; }
public string description { get; set; }
}
// First we define the parameter that we are going to use
// in our OrderBy clause. This is the same as "(parameter =>"
// in the example above.
var param = Expression.Parameter(typeof(SomeClass), "parameter");
// Now we'll make our lambda function that returns the
// request.SortingName property by it's name.
var expression = Expression.Lambda<Func<SomeClass, int>>(Expression.Property(param, request.SortingName), param);
好吧,如果 "request.SortingName" 是类型 "int" (id) ,则此代码有效,但如果我想通过 "string" (description) 或其他类型进行 orderBy,则此代码不起作用。
我将表达式更改为使用“对象”:
var expression = Expression.Lambda<Func<SomeClass, object>>(Expression.Property(param, request.SortingName), param);
但是当我运行代码时,编译器会抛出下一个异常: 'System.Int32' 类型的表达式不能用于返回类型 'System.Object'
如果属性是字符串类型,则例外是“System.String”类型的表达式不能用于返回类型“System.Object”
换句话说,代码不适用于“对象”类型。
任何人都知道我该如何解决这个问题?
谢谢你的时间。