我正在使用 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 asExpression<Func<TEntity, object>>
getting an exception invalid casting between int to object butExpression<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/