问题描述
如何创建涉及多个字段的 order-by 表达式?
这不是正确的语法:
Expression<Func<Employee,Object>> orderByExpression = null;
orderByExpression = e => e.LastName || e.FirstName;
_service.GetEmployeesAsync(orderByExpression);
解决方法
假设名称是字符串,这应该可以工作:
orderByExpression = e => e.LastName + e.FirstName;
但是通过 EF 按多个字段排序的常见模式是将 OrderBy
与以下 1..n ThenBy
调用链接起来,因此可能更清晰的方法是将 GetEmployeesAsync
更改为接受 { {1}} 表达式作为参数并相应地处理它们。像这样:
params
用法如下:
public Task<IEnumerable<Employee>> GetEmployeesAsync(Expression<Func<Employee,object>> orderBy,params Expression<Func<Employee,object>>[] thenBys)
{
IQueryable<Employee> query = ...;
var orderedQuery = query.OrderBy(orderBy);
for (int i = 0; i < thenBys.Length; i++)
{
orderedQuery = orderedQuery.ThenBy(thenBys[i]);
}
...
}