我正在使用EF6(使用MySQL提供程序),我发现了这种奇怪的行为。 我从我的通用存储库中使用TakeWhereAsync方法。
public async Task<IReadOnlyCollection<T>> TakeWhereAsync(Expression<Func<T, string>> sortExpression,
Expression<Func<T, bool>> whereExpression,
bool desc, int pageSize, int pageIndex)
{
var skipRows = (pageIndex - 1) * pageSize;
var query = GetAllQuery().Where(whereExpression);
query = desc
? query.OrderByDescending(sortExpression)
: query.OrderBy(sortExpression);
return await query.Skip(skipRows).Take(pageSize).ToListAsync();
}
它返回绝对无序的数据。
我试图从IQueryable
获取SQL请求它返回了有序数据。
你能提供解决方案吗?
答案 0 :(得分:0)
通过评论中的讨论,我们有:
var testData = await _repository.TakeWhereAsync(_ => sortField, ...)
我假设sortField
在这里是string
- 也许是"Id"
- 这意味着您要根据常量对所有行进行排序:字符串文字"Id"
,每行不会改变。您实际上想要的是对通过解析该字段找到的列进行排序。您可以通过对许多预期方案进行硬编码,或者通过基于反射构建表达式树来实现此目的。可以找到here的完整示例。使用本答案中的代码,您将拥有:
string orderByField = "Id";
IQueryable<T> query = ... // from somewhere, your db context etc
query = query.OrderBy(orderByField); // using the code from the linked question