首页 > 解决方案 > 创建排序表达式> 具有多个字段

问题描述

如何创建涉及多个字段的 order-by 表达式?

这不是正确的语法:

Expression<Func<Employee, Object>> orderByExpression = null;
orderByExpression = e => e.LastName || e.FirstName;

_service.GetEmployeesAsync(orderByExpression);

标签: linqentity-framework-corelinq-to-entitiesentity-framework-5

解决方案


假设名称是字符串,这应该可以工作:

orderByExpression = e => e.LastName + e.FirstName;

但是通过 EF 按多个字段排序的常见模式是OrderBy与以下 1..nThenBy调用链接,因此可能更清晰的方法是更改GetEmployeesAsync​​为接受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]);
    }
    ...
}

用法如下所示:

 _service.GetEmployeesAsync(x => x.SomeProp, x=> x.SomeOtherProp)

推荐阅读