我有以下排序表达式:
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 表达式,以便我可以使用 like
this.Students = this.Students.OrderBy(sortExpression);
这是因为我有很多排序字段,例如上面定义的 TotalMarks,我只想从排序字段创建表达式,然后调用 OrderBy。
我从这个链接知道,我们可以创建一个使用子属性的表达式,但不能使用内部表达式。
目前我已经给出了一个开关盒并在每种情况下都写了相同的东西,比如
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) {}