我有一个 OrderBy 语句的集合和数量,它使用 query.Sort 参数进行排序
switch (filters.Sort)
{
case "new":
query = query.OrderByDescending(a => a.CreatedAt);
break;
case "old":
query = query.OrderBy(a => a.CreatedAt);
break;
case "salary-asc":
query = query.OrderBy(a => a.Profile.CompensationTypeRate.FromCompensation);
}
现在我需要使用 query.Grade
参数应用另一种排序。我知道我应该使用 ThenBy
来拥有多个 Order 语句,但在这种情况下我无法将其写在一行中。
有没有办法编写 OrderBy
和 ThenBy
以便它们逐一执行,而不是在一行中执行?
或者我可以创建一些包含我的 OrderBy
和 ThenBy
条件的匿名函数吗?
最佳答案
如果使用 IOrderedQueryable<T>
类型的变量,则可以分两部分完成。 - 这就是启用ThenBy
的原因。例如:
IOrderedQueryable<Application> ordered;
switch (filters.Sort)
{
case "new":
ordered = query.OrderByDescending(a => a.CreatedAt);
break;
case "old":
ordered = query.OrderBy(a => a.CreatedAt);
break;
case "salary-asc":
ordered = query.OrderBy(a => a.Profile.CompensationTypeRate.FromCompensation);
default:
// You need to work out what you want to do here. Maybe just
// order by ID? You need to order by *something* to start with
// in order to use ThenBy
}
// Apply the same secondary ordering, regardless of the primary one
ordered = ordered.ThenBy(x => x.Grade);
// You can then continue to use ordered, or assign the value back
// to query:
query = ordered;
请注意,所有这些仍然是惰性的。在您尝试使用结果之前,排序实际上不会发生。
关于c# - LiNQ 在 OrderBy 之后使用 ThenBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687446/