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

标签 c# entity-framework expression

我正在使用 EntityFramework Code First 通用存储库。我有一种过滤方法。此方法还可以进行分页和排序。方法如下

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

}

排序类型为 Expression<Func<TEntity, object>>如果我将此参数作为 Expression<Func<TEntity, object>> 传递在 int 到对象之间获取异常无效转换但 Expression<Func<TEntity, string>>发送任何异常..

任何想法 谢谢

最佳答案

Type of sorting is Expression<Func<TEntity, object>> If i pass this parameter as Expression<Func<TEntity, object>> getting an exception invalid casting between int to object but Expression<Func<TEntity, string>> dosent throw any exception..

那是因为int是值类型,而 string是引用类型。一个int需要装箱才能转换为object , 和 Linq Expression API 不会自动执行。生成表达式时,如果返回 int , 你需要添加一个 Expression.Convert(<expr>, typeof(object))在返回之前围绕表达式。

关于c# - 如何将表达式 Func<T,int> 转换为 Func<T,object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25075674/

相关文章:

unit-testing - EF4.1 DbSet 与 EF4 ObjectContext 和单元测试

javascript - 帮助创建 peg.js 解析器

c - Pop() 方法总是给出堆栈中的第一个元素而不删除它

c# - 我如何在同一个程序/应用程序中重新打开 WPF 窗口?

c# - 如何从另一个线程将项目添加到 ListView 而不会导致异常

c# - 使用 Linq 查询连接两个字段

string - bquote : How to include an expression saved as a string object?

c# - 定义用于执行程序的工作目录 (C#)

asp.net-mvc - 如何在 Entity Framework 中重用投影?

sql-server - Entity Framework 4 是否可以与 SQL Server 2005 一起使用?