【发布时间】:2017-12-23 19:48:09
【问题描述】:
我创建了一个返回 lambda 语句的方法,以便在 OrderBy 或 OrderByDescending linq 方法中使用。
我想使用排序表达式的行是这样的:
var results = _dbSet.AsNoTracking()
.OrderByDescending(sort)
.ToList();
return results;
我想用这个方法设置“排序”参数:
public static Expression<Func<TEntity, object>> GetSortExpression<TEntity>(string propertyName)
{
var item = Expression.Parameter(typeof(TEntity), "entity");
var prop = Expression.Property(item, propertyName);
var selector = Expression.Lambda<Func<TEntity, object>>(prop, item);
return selector;
}
但是对于像“Product.Price”这样的“double”属性会抛出错误
System.ArgumentException: 'System.Double' 类型的表达式不能用于返回类型 'System.Object'
我找不到问题出在哪里.....
【问题讨论】:
-
我很困惑为什么您要返回
Expression<Func<TEntity, object>>而不是IQueryably<TEntity>。我已经完成了几个具有排序/过滤功能的项目。只有一次我必须重写和创建自己的表达式树,那是一个非常复杂的组合过滤器。
标签: c# entity-framework linq lambda expression