【问题标题】:Rank objects based on multiple fields [duplicate]基于多个字段对对象进行排名[重复]
【发布时间】:2016-12-20 00:01:08
【问题描述】:

我有一个场景,我想根据不同的属性对记录列表进行排序和排名。每个对象都有一个 Total 属性,还有一个称为 Scores 的整数值列表, 模型就像

public class Routine
{
    public string Title { get; set; }

    public int Total { get; set; }

    public List<int> Scores { get; set; }
}

我要对记录进行排名,

  • 第一:基于Total Property
  • 第二个:基于 Scores 属性中的第一个值
  • 那么:基于 Scores 属性中的第二个值
  • 等等

例如我考虑这三个记录。

感谢您的任何帮助和想法。

【问题讨论】:

  • 不,对我来说 ThenBy 需要根据多个值排序,Scores 属性
  • 您可以根据需要添加ThenBy-clauses。
  • 如果给出的答案不是您需要的,您能否提供模型代码?
  • 我编辑了我的问题并添加了模型

标签: c# linq sorting


【解决方案1】:

使用 linq,您可以使用 Orderby(Descending),然后将任意数量的 ThenBy(Descending) 子句链接在一起。

        var soterdList= initialList.OrderByDescending(r => r.Total)
            .ThenByDescending(r => r.Scores.FirstOrDefault())
            .ThenByDescending(r => r.Scores.Skip(1).FirstOrDefault()).ToList();

【讨论】:

  • 由于第二个属性是整数列表,ThenBy 似乎对我不起作用
  • @ali 我已经更新了代码以适合您的模型。
【解决方案2】:

您可以使用OrderByThenBy

var ordered = items.OrderBy(x => x.TotalProperty).ThenBy(x => x.S1).ThenBy(x => x.S2);

如果要降序排列,也可以使用OrderByDescending

【讨论】:

  • 由于第二个属性是整数列表,因此 ThenBy 似乎对我不起作用
  • 整数列表是什么意思?在问题中,每行有 1 个整数。请澄清你的意思。
  • 第二个属性是Scores,即List,我编辑问题并添加我的模型
猜你喜欢
  • 2011-05-03
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多