【发布时间】:2020-01-15 08:09:02
【问题描述】:
我正在尝试动态应用排序。我正在使用EntityFramework。我正在传递sortorder 和sortfield。现在我不想写条件来按sortfield 列排序结果。我尝试过的如下,
public static IOrderedQueryable<TSource> OrderByProperty<TSource, TKey>(this IQueryable<TSource> source, string property, string sortorder)
{
ParameterExpression param = Expression.Parameter(typeof(TSource), "t");
MemberExpression member = Expression.Property(param, property);
var ex = Expression.Lambda<Func<TSource, TKey>>(member, param);
return source.OrderBy<TSource, TKey>(ex);
}
我叫它如下,
OrderByProperty<Class, dynamic>(objClass, sortfield, sortorder);
当sortfield 的类型为System.Int32 时,我遇到了错误;
“System.Int32”类型的表达式不能用于返回类型“System.Object”
string 相同。任何帮助表示赞赏。
【问题讨论】:
-
您可能需要先Convert
member到TKey,然后才能在 Expression.Lambda 中使用它。喜欢:Expression.Lambda<Func<TSource, TKey>>(Expression.Convert(member, typeof(TKey)), param); -
您传入的属性名称(
string property)需要与方法调用中的第二个类型参数(TKey)的类型相同。这就是错误告诉你的内容。
标签: c# .net entity-framework iqueryable