表示LINQ to Entitys仅支持强制转换实体数据模型基元类型”
本文关键字:数据模型 实体 类型 转换 to LINQ Entitys 支持 表示 | 更新日期: 2023-09-27 17:59:24
我有一个通用方法:
public IQueryable<TEntity> PaginateAndOrderByDesc<TEntity>(int pageIndex, int pageSize, Expression<Func<TEntity, object>> orderByDescending)
where TEntity : class, IContextEntity
{
int numberOfRecordsToSkip = (pageIndex - 1) * pageSize;
return context.Set<TEntity>().OrderByDescending(orderByDescending).Skip(numberOfRecordsToSkip).Take(pageSize);
}
当我使用它时:
List<Person> people = repository.PaginateAndOrderByDesc<Person>(1,
30, x = > x.RegistrDate)
.ToList();
我收到一个错误:"无法将类型"System.DateTime"强制转换为类型"System.Object"。LINQ to Entities只支持强制转换EDM基元或枚举类型。"
如何使泛型函数与orderByDescending表达式一起工作?
添加一个通用参数来表示您要订购的类型:
public IQueryable<TEntity> PaginateAndOrderByDesc<TEntity, TKey>(
int pageIndex,
int pageSize,
Expression<Func<TEntity, TKey>> sortSelector)
where TEntity : class, IContextEntity
{
int numberOfRecordsToSkip = (pageIndex - 1) * pageSize;
return context.Set<TEntity>()
.OrderByDescending(sortSelector)
.Skip(numberOfRecordsToSkip)
.Take(pageSize);
}
话虽如此,我建议不要在此查询中包含OrderBy
方法。将"排序数据"answers"获取某个页面"操作组合在一起会降低查询的可读性。把它们分开。"对数据进行排序"操作就是这样;你真的只需要创建一个"获取特定页面"查询:
public static IQueryable<TEntity> GetPage<TEntity>(
this IOrderedQueryable<TEntity> query,
int pageIndex,
int pageSize)
{
int numberOfRecordsToSkip = (pageIndex - 1) * pageSize;
return query.Skip(numberOfRecordsToSkip)
.Take(pageSize);
}
除了赋予您更大的能力来撰写您认为合适的查询外,更重要的是,这会产生更可读的查询,其中发生的事情基于调用的方法非常清楚。