c# - LiNQ 在 OrderBy 之后使用 ThenBy

标签 c# mysql sql linq sql-order-by

我有一个 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 语句,但在这种情况下我无法将其写在一行中。

有没有办法编写 OrderByThenBy 以便它们逐一执行,而不是在一行中执行?

或者我可以创建一些包含我的 OrderByThenBy 条件的匿名函数吗?

最佳答案

如果使用 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/

相关文章:

即使有可用值,MySQL MAX也会返回null

sql - 如何在 Microsoft SQL 中将一列中的字符串汇总为一行?分组依据不起作用,因为它是 MSSQL

php - Laravel 框架无法启动,为什么?

c# - 具有未知数字的动态 Linq 和替换值?

c# - 尝试通过微软示例理解 MVVM

c# - VSTO Word 2010 getScreentip getSupertip 未触发

c# - 如何对包含动态对象的列表进行排序

mysql如何比较两列以从第三列中找到最大值

php - 如何在具有相同名称的多行mysql中插入(订单表格数据)

MySQL 查询以返回指示的两个单词之间的所有文本(子字符串?)