c# - 使用另一个集合排序

标签 c# linq

我有一个独特的排序问题,我有一个按“顺序”给我的对象数组,但我不知道该顺序或根据对象的任何特定属性排序。

对象如下

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/

相关文章:

c# - 如何从 List<string> 中的字符串中删除数字/数字?

c# - 添加具有数据类型属性的新 XElement

c# - 如何判断一个点是在线的右侧还是左侧

c# - 头脑 Storm : How to arrange DateTime to particular interval frame?

c# - 如何将包含与 Guid 一起使用?

vb.net - 组加入有多个条件,其中之一是常量

c# - 从 Dictionary 中获取特定值的键作为 List<>

c# - 为什么会有两种SortedList?

c# - Entity Framework 代码优先 CTP5 : How to define non primitive types

linq - 是否可以从 Visual Studio 2008 中的 edmx 更新 sql 数据库架构?