我返回一个IOrderedQueryable<T>
像这样:为什么我不能在IOrderedQueryable上调用Skip?
response.Data = Expressions
.ApplySorts(request, result)
.Skip(request.Skip)
.Take(request.Take)
.ToList();
这里是我的类,它包含返回的IOrderedQueryable<T>
的方法。
public static class Expressions
{
public static IOrderedQueryable<T> ApplySorts<T>(
DataRequest request, IQueryable<T> items)
{
var sorts = request.Sort;
if (sorts != null)
{
foreach (var sort in sorts)
{
items = items.OrderBy(sort.Field + " " + sort.Dir);
}
}
return (IOrderedQueryable<T>)items;
}
}
但在运行时我得到这个错误:
{"The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'."}
注意,目前有发生没有各种各样;然而,ApplySorts<T>()
的返回值还应该是返回Skip()
所期望的类型,否?
这是我怀疑过。我希望有一种方法可以在不知道实体密钥的情况下应用这种方法。你知道吗?可能类似'var key = t.GetProperties()。其中(prop => Attribute.IsDefined(prop,typeof(Key)));' – user1477388
@ user1477388没有反射(或者让所有实体都继承一个暴露主键),我不认为这是可能的。你可以尝试'.OrderBy(i => 1)',但即使这样做,它会引发关于“Skip”和“Take”是否合理的问题。在我看来,你是分页数据,所以请求*应该*提供一个排序。否则,您的分页功能将无法正常工作。 – Rob
@ user1477388是的,如果你的属性定义了属性,那肯定有可能 – Rob