【问题标题】:Create an order-by Expression<Func<T>> with multiple fields创建具有多个字段的 order-by Expression<Func<T>>
【发布时间】:2021-07-04 20:44:33
【问题描述】:

如何创建涉及多个字段的排序表达式?

这不是正确的语法:

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

_service.GetEmployeesAsync(orderByExpression);

【问题讨论】:

    标签: linq entity-framework-core linq-to-entities entity-framework-5


    【解决方案1】:

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

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

    但通过 EF 按多个字段排序的常见模式是将 OrderBy 与以下 1..n ThenBy 调用链接起来,因此可能更明确的方法是将 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多