1

我有以下存储库方法,它应用过滤器然后对集合进行排序:

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

1 回答 1

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

问题是FuncinOrderBy子句的第二个参数object在您的代码中,并且您传递给它一个int,然后它会尝试将其int转换为object. 在我上面粘贴的代码中,您有一个额外的通用参数,允许您为排序函数传递任何类型,所以应该可以。

于 2013-03-18T21:19:45.963 回答