首页 > 解决方案 > 按对象属性之一的值对对象列表进行排序,其中只有一个值是感兴趣的

问题描述

我有一个大对象列表,我想根据对象的一个​​属性的值对其进行排序。

但是,我关心的是那些具有该属性的单个给定值的那些位于顶部 - 所有其他值,我不关心它们的顺序。例如,如果我有:

 public class MyBigObject{
 
      public string Colour; 
      public string ImportantProperty;

 }

现在,想象一下我有这些:

 var a = new MyBigObject("red", "P2")
 var b = new MyBigObject("red", "P1")
 var c = new MyBigObject("red", "P3")
 var d = new MyBigObject("yellow", "P99")
 var e = new MyBigObject("yellow", "P3")

我希望它们按颜色排序,然后按 ImportProperty 排序,其中“P3”是我感兴趣的唯一值,我希望在排序列表中排在第一位:

ListOfThoseObjects.OrderBy(c => c.Colour).ThenBy(x => x.???? where "P3" is the most important)

需要产生:

 c (red / P3)
 a (red / P2)
 b (red / P1)
 e (yellow / P3)
 d (yellow / P99)

我希望能够做到这一点,而不必列出 ImportProperty 可以是的所有可能值,因为有很多值并且它们可能会超出我的控制范围。我所知道的是,P3 在排序方面是最重要的。

任何帮助都感激不尽!

标签: c#listlinqsorting

解决方案


您可以只使用三元评估为 0 或 1:

ListOfThoseObjects
    .OrderBy(c => c.Colour)
    .ThenBy(x => x.ImportantProperty is "P3" ? 0 : 1);

推荐阅读