我有以下存储库方法,它应用过滤器然后对集合进行排序:
public IQueryable<TE> SelectAll(Expression<Func<TE, bool>> predicate,
Expression<Func<TE, object>> sortExpression, bool orderDescending = false)
{
var list = _ctx.CreateQuery<TE>("[" + typeof(TE).Name + "]")
.AsExpandable().Where(predicate);
return orderDescending
? list.OrderByDescending(sortExpression)
: list.OrderBy(sortExpression);
}
where谓词工作正常,但是如果应用OrderBy,我们会收到以下错误:
无法将类型'System.Int32'强制转换为'System.Object'。 LINQ to Entities仅支持转换EDM原语或枚举类型。
编辑:这是调用代码:
var documentos = SelectAll(d => serviciosId.Contains(d.ServicioId) && d.TipoSociedadId == tipoSociedadId, d => d.Grupo);
答案 0 :(得分:1)
试试这个:
public IQueryable<TE> SelectAll<TE, TKey>(Expression<Func<TE, bool>> predicate,
Expression<Func<TE, TKey>> sortExpression, bool orderDescending = false)
{
var list = _ctx.CreateQuery<TE>("[" + typeof(TE).Name + "]")
.AsExpandable().Where(predicate);
return orderDescending
? list.OrderByDescending(sortExpression)
: list.OrderBy(sortExpression);
}
问题是代码中Func
子句中的OrderBy
的第二个参数是object
,而你传递的是int
,然后尝试将int
投射到object
。在我上面粘贴的代码中,你有一个额外的泛型参数,允许你传递任何类型的订购函数,所以,这应该工作。