C# LINQ分组结果并按特定顺序对其排序
我想按如下方式排列我的数据:C# LINQ分组结果并按特定顺序对其排序,c#,linq,C#,Linq,我想按如下方式排列我的数据: 按称为“类型”的值对我的数据进行分组 我想按类型的特定顺序对组进行排序,例如: 我定义了顺序:类型1,类型3,类型4,类型2 现在,我希望所有设置都像这样: -前几行是TYPE1类型的行 -接下来的几行是TYPE3类型的行 有谁能告诉我如何实现这一点吗?您提到了类型是一个枚举。我可以看到两个简单的选择订购这个,1。更改枚举成员或2的值。使用自定义命令 解决方案1-更改枚举成员值 这非常简单,但可能不符合您的要求(即枚举值可能在其他地方指定或需要硬编码值) 按所
有谁能告诉我如何实现这一点吗?您提到了
类型是一个枚举。我可以看到两个简单的选择订购这个,1。更改枚举成员或2的值。使用自定义命令
解决方案1-更改枚举成员值
这非常简单,但可能不符合您的要求(即枚举值可能在其他地方指定或需要硬编码值)
按所需顺序将枚举成员的值更改为固定值:
public enumeration YourEnumName {
TYPE1 = 1,
TYPE3 = 2,
TYPE4 = 3,
TYPE2 = 4
}
YourEnum[] orderList = new [] { YourEnum.TYPE1, YourEnum.TYPE3, YourEnum.TYPE4, YourEnum.TYPE2 };
var result = yourData.OrderBy(x => orderList.IndexOf(x.Type));
解决方案2-使用自定义列表进行订购
在进行订购时,请创建一个列表来指定您想要的订单:
public enumeration YourEnumName {
TYPE1 = 1,
TYPE3 = 2,
TYPE4 = 3,
TYPE2 = 4
}
YourEnum[] orderList = new [] { YourEnum.TYPE1, YourEnum.TYPE3, YourEnum.TYPE4, YourEnum.TYPE2 };
var result = yourData.OrderBy(x => orderList.IndexOf(x.Type));
第二种解决方案的局限性在于,如果您有一个在订单列表
中不存在的项目,那么您会发现这些项目按照它们在列表开头收到的顺序放在一起。这个问题有解决方案,但我不清楚您是否会遇到它。是枚举还是字符串,还是其他什么?Type是我的枚举,我希望基于枚举值有特定的顺序var-typeSequence=new[]{TYPE1,TYPE3,TYPE4,TYPE2};var ordered=items.OrderBy(item=>typeSequence.IndexOf(item.Type))如果这是一个性能问题,您可以尝试var-typeSequence=newdictionary{{TYPE1,1},{TYPE3,2},[…]}然后是typeSequence[item.Type]
。请在问题中提供有关数据结构的更多信息。最好的方法是使用一段代码。您还可以包括您所做的研究以及基于该研究所做的任何尝试。