我有一个独特的排序问题,我有一个按“顺序”给我的对象数组,但我不知道该顺序或根据对象的任何特定属性排序。
对象如下
public class Case
{
public virtual int Id { get; set; }
public virtual string PalletId { get; set; }
}
我需要做的是获取我得到的这个 Cases
数组,并创建这些对象的新列表,该列表按原始集合 PalletId 的相对顺序排序
字段然后是它的 id 字段。不过,这不是该字段的绝对顺序,因为它是相对于集合的原始顺序的。
例如:
原创合集
Id ---------- PalletId
1 ---------- 5
2 ---------- 6
3 ---------- 4
4 ---------- 5
5 ---------- 6
6 ---------- 4
排序集合
Id ---------- PalletId
1 ---------- 5
4 ---------- 5
2 ---------- 6
5 ---------- 6
3 ---------- 4
6 ---------- 4
上面的排序集合代表了我需要如何对它们进行排序。请注意排序集合中的 palletid 不是按升序或降序排列的,而是按照您在原始集合中看到它们的顺序 (5、6、4) 排序的。在每个 pallet id 中,我必须以相同的顺序对 id 字段进行排序。所以这是我在原始集合中看到特定托盘 ID 的 Id 字段的顺序。
最佳答案
澄清之后,一个简单的 GroupBy + SelectMany 似乎可以解决问题:
var sortedCases = originalCases
.GroupBy(c => c.PalletId)
.SelectMany(g => g.OrderBy(c => c.Id)) ;
因为 GroupBy()
根据 this SO answer 保留键的初始顺序.
关于c# - 使用另一个集合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799068/