gpt4 book ai didi

c# - 具有内部表达式的 OrderBy linq 表达式

转载 作者:行者123 更新时间:2023-11-30 17:55:33 24 4
gpt4 key购买 nike

我有以下排序表达式:

this.Students = this.Students.OrderBy(x => x.ExamData.OrderByDescending(p => p.ExamDate).ThenByDescending(p => p.ExamId).FirstOrDefault().TotalMarks);

虽然我的想法是抽象表达式为

x => x.ExamData.OrderByDescending(p => p.ExamDate).ThenByDescending(
p => p.ExamId).FirstOrDefault().TotalMarks

做成 lambda 表达式,这样我就可以像这样使用

this.Students = this.Students.OrderBy(sortExpression);

这是因为我有很多排序字段,如上面定义的 TotalMarks,我只想从排序字段创建表达式,然后调用 OrderBy。

我从这个知道link ,我们可以创建一个使用子属性的表达式,但不使用内部表达式。

目前我已经给出了一个 switch case 并在每个 case 中写了相同的东西,比如

this.Students = this.Students.OrderBy(x => x.ExamData.OrderByDescending(p => p.ExamDate).ThenByDescending(p => p.ExamId).FirstOrDefault().SubjectName);

所以我的想法是使用静态方法创建 kindof ExpressionBuilder,该方法构建传递给 fieldName 的表达式,例如

public static Expression BuildSortExpression(string fieldName) {}

最佳答案

您可以轻松地将大部分逻辑拉入一个方法中:

private int sortExpression(Student x) { 
return x.ExamData.OrderByDescending(p => p.ExamDate).ThenByDescending(p => p.ExamId).FirstOrDefault().TotalMarks;
}

假设 TotalMarks 是一个 int

那么你只需要使用:

this.Students.OrderBy(x => sortExpression(x));

或将其添加为 Student 的属性。

警告:如果您将它与 ORM(linq to SQL、 Entity Framework 等)一起使用,它的执行效率将不如以前的代码!

关于c# - 具有内部表达式的 OrderBy linq 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com