gpt4 book ai didi

c# - 如何将表达式 Func 转换为 Func

转载 作者:太空狗 更新时间:2023-10-30 01:04:02 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com