【问题标题】:LINQ Dynamic sort with nullable fields带有可为空字段的 LINQ 动态排序
【发布时间】:2014-09-05 11:32:36
【问题描述】:

我有一个动态排序机制,用于执行动态 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”

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

【问题讨论】:

  • 您是否尝试过使用Expression.ConvertDateTime? 转换为object

标签: c# linq


【解决方案1】:

您需要先将其转换为对象。这与可为空的字段无关。即:

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);

【讨论】:

    【解决方案2】:

    这是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'的骗子

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2019-10-11
      • 2014-06-06
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      相关资源
      最近更新 更多