[英]Entity Framework: combining paging with Dynamic LINQ OrderBy
我正在使用Entity Framework检索某些数据,如下所示:
var items = GetItems(storeNumber);
Sort(items);
Page(items);
return await items.ToListAsync();
我有以下私人助手方法:
private IQueryable<Item> GetItems(string storeNumber)
{
return _dbContext.Items.Where(x => x.StoreNumber == storeNumber);
}
我使用动态LINQ对结果进行排序。
private void Sort(IQueryable<Item> items, string fieldToSort, string sortDirection)
{
items = items.OrderBy($"{fieldToSort} {sortDirection}");
}
在我的Page方法中,我得到了异常
必须在方法“跳过”之前调用方法“ OrderBy”
private void Page(IQueryable<Item> items, int skip, int take)
{
items = items.Skip(skip).Take(take);
}
我曾怀疑该错误的原因是因为项目需要为IOrderedQueryable<Item>
但对于动态LINQ OrderBy来说没有重载,该动态LINQ OrderBy返回 IOrderedQueryable<T>
。 如果我将Sort和Page代码提取到相同的方法中,则使用var
不再是问题,它将推断类型。 问题似乎是在排序和分页时使用IQueryable
接口。 有没有办法将这种逻辑分解为单独的方法,但仍使用Dynamic LINQ进行排序?
任何帮助深表感谢。
您应该像对GetItems()一样,从Sort()和Page()方法返回新构造的IQueryable
。 如果您在这样的方法中“重写”参数值,则它对最初传递给该参数的值没有影响,因为C#使用按值传递参数的语义
请参阅此以获取更多参考: https : //docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/passing-parameters
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.