LINQ分组结果并按特定顺序对其进行排序

时间:2020-11-12 13:40:37

标签: c# linq

我要这样订购数据:

  1. 通过一个名为“类型”的值对我的数据进行分组

  2. 我想按类型的特定顺序对组进行排序,例如: 我已经定义了顺序:TYPE1,TYPE3,TYPE4,TYPE2

    现在我希望所有设置都像这样:

    -前几行是TYPE1类型行,

    -接下来的几行是TYPE3类型行,

    .....

谁能告诉我如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

您已经提到Type是一个枚举。我可以看到两个简单的排序方法:1.更改枚举成员的值,或2.使用自定义排序。

解决方案1-更改枚举成员值

这很简单,但是可能不符合您的要求(即枚举值可能是在其他地方指定的,或者需要硬编码的值)。

按所需顺序将枚举成员的值更改为固定值:

public enumeration YourEnumName {
    TYPE1 = 1,
    TYPE3 = 2,
    TYPE4 = 3,
    TYPE2 = 4
}

解决方案2-使用自定义列表进行订购

进行订购时,请创建一个列表以指定所需的顺序:

YourEnum[] orderList = new [] { YourEnum.TYPE1, YourEnum.TYPE3, YourEnum.TYPE4, YourEnum.TYPE2 };

var result = yourData.OrderBy(x => orderList.IndexOf(x.Type));

第二种解决方案的局限性在于,如果orderList中不存在某项,那么您会发现这些项按照它们在列表开头的接收顺序放置在一起。有解决此问题的方法,但我不清楚您是否会遇到。