如何将表达式Func <T,int>转换为Func <T,object>

Pol*_*dar 4 c# expression entity-framework

我正在使用EntityFramework Code First Generic Repository.我有一个过滤方法.此方法也进行分页和排序.方法如下

public IQueryable<TEntity> Filter(Expression<Func<TEntity, bool>> filter, out int total, Expression<Func<TEntity, object>> sorting, SortType sortDirection, int index = 1, int size = 30)
{
    index = index - 1;

    int skipcount = index * size;
    IQueryable<TEntity> resetSet = filter != null ? Entities.Where(filter) : Entities.AsQueryable();

    total = Entities.Where(filter).Count();
    if (sortDirection == SortType.Desc)
    {
                resetSet = skipcount == 0 ?
                    resetSet.Where(filter).OrderByDescending(sorting).Skip(0).Take(size) :
                    resetSet.Where(filter).OrderByDescending(sorting).Skip(skipcount).Take(size);
    }
    else
    {
                resetSet = skipcount == 0 ?
                    resetSet.Where(filter).OrderBy(sorting).Skip(0).Take(size) :
                    resetSet.Where(filter).OrderBy(sorting).Skip(skipcount).Take(size);
    }

            return resetSet.AsQueryable();

}
Run Code Online (Sandbox Code Playgroud)

排序类型是Expression<Func<TEntity, object>>如果我传递此参数作为Expression<Func<TEntity, object>>获取异常无效铸造int到对象但Expression<Func<TEntity, string>>吐出任何异常..

任何想法谢谢

Tho*_*que 6

排序类型是Expression<Func<TEntity, object>>如果我传递此参数作为Expression<Func<TEntity, object>>获取异常无效铸造int到对象但Expression<Func<TEntity, string>>吐出任何异常..

那是因为int是一个值类型,string而是一个引用类型.一个int被装箱的需求转换为object和LINQ的ExpressionAPI不会自动做.生成表达式时,如果返回表达式,则int需要Expression.Convert(<expr>, typeof(object))在返回表达式之前添加表达式.