linq - 创建排序表达式> 具有多个字段
问题描述
如何创建涉及多个字段的 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..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)
推荐阅读
- python - 绘制适合图像的放大部分?
- python - Reading two Complete different dataframes from a single csv file
- android - 在 Koin MVP 中提供活动
- hyperledger-fabric - 交易是否作为加密数据提交给 Hyperledger Fabric?
- python - 使用ezdxf 将INSERT 实体从一个dxf 文件复制到另一个dxf 文件?
- django - 用 django 原始 sql 查询填充表单集
- react-native - 有没有办法让 `react-navigation` 的 `indicator` 适合标签?
- mysql - 对于 50000 行的表,MySQL Trigger AFTER UPDATE 执行非常慢
- typescript - Typescript 和 Express Validator 自定义验证类型
- java - JavaFX - 如何解决(java.lang.reflect.InvocationTargetException)错误/我得到这个当我将@FXML添加到控制器类时