我有一个动态排序机制,我用它做一个动态LINQ OrderBy。这适用于普通领域。
string sortField = "MyField"
var orderByParam = Expression.Parameter(typeof(MyType), "MyType");
var sortExpression = Expression.Lambda<Func<MyType, object>>(Expression.Property(orderByParam, sortField), orderByParam);
但是,当我尝试使用Nullable字段(恰好是DateTime)时,我收到以下错误:
不能使用'System.Nullable`1 [System.DateTime]'类型的表达式 返回类型'System.Object'
我怎样才能解决这个问题?
答案 0 :(得分:2)
您需要先将其转换为对象。这与可空字段无关。即:
string sortField = "MyField";
var orderByParam = Expression.Parameter(typeof(MyType), "MyType");
var sortExpression = Expression.Lambda<Func<MyType, object>>(
Expression.Convert(Expression.Property(orderByParam, sortField),
typeof(object)), orderByParam);
答案 1 :(得分:1)
这是Expression of type 'System.DateTime' cannot be used for return type 'System.Object'和Expression of type 'System.Int32' cannot be used for return type 'System.Object'
的欺骗基本上你不能为任何值类型(包括可空)执行此操作,因为您需要明确地装箱
查看第一个链接的已接受答案。