我正在使用Entity Framework重新搜索一些数据,如下所示:
@SpringBootApplication(basePackages = {"com.test.myhazelcast"})
我有这些私人助手方法:
var items = GetItems(storeNumber);
Sort(items);
Page(items);
return await items.ToListAsync();
我使用Dynamic LINQ对结果进行排序。
private IQueryable<Item> GetItems(string storeNumber)
{
return _dbContext.Items.Where(x => x.StoreNumber == storeNumber);
}
在我的Page方法中,我得到了异常
方法&#39; OrderBy&#39;必须在方法之前调用&#39;跳过&#39;
private void Sort(IQueryable<Item> items, string fieldToSort, string sortDirection)
{
items = items.OrderBy($"{fieldToSort} {sortDirection}");
}
我怀疑错误的原因是因为项目需要private void Page(IQueryable<Item> items, int skip, int take)
{
items = items.Skip(skip).Take(take);
}
但是动态LINQ OrderBy没有重载 IOrderedQueryable<Item>
。
如果我将Sort和Page代码提取到相同的方法中,使用IOrderedQueryable<T>
它不再是问题,它会推断出类型。问题似乎是在排序和分页时使用var
接口。有没有办法可以将这个逻辑分解为单独的方法,但仍然使用Dynamic LINQ进行排序?
非常感谢任何帮助。
答案 0 :(得分:2)
您应该从Sort()和Page()方法返回新构造的IQueryable
,就像对GetItems()一样。
如果你在这样的方法中“重写”一个参数值,它对最初传入参数的值没有影响,因为C#使用by-value参数传递语义
有关详细参考,请参阅此处: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/passing-parameters