LINQ具有可空字段的动态排序

时间:2014-09-05 11:32:36

标签: c# linq

我有一个动态排序机制,我用它做一个动态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'

我怎样才能解决这个问题?

2 个答案:

答案 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'

的欺骗

基本上你不能为任何值类型(包括可空)执行此操作,因为您需要明确地装箱

查看第一个链接的已接受答案。