具有可为null字段的LINQ动态排序
本文关键字:LINQ 动态 排序 字段 null | 更新日期: 2023-09-27 18:20:56
我有一个动态排序机制,用于执行动态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"
我怎样才能避开这个?
您需要先将其转换为对象。这与可为null的字段无关。即:
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);
这是类型为';System.DateTime';不能用于返回类型';System.Object';以及类型为';System.Int32';不能用于返回类型';System.Object';
基本上,你不能对任何值类型(包括nullable)这样做,因为你需要显式地框
请参阅第一个链接的已接受答案。