首页 > 解决方案 > 拆分有序列表

问题描述

我正在尝试创建一个排序的列表列表。其中外“层”按字段 BU 排序。内层按 JobNum 排序。我有这个方法和变量。

public List<string> ListSorter<T>(IEnumerable<T> records)where T : 
IMapToCSVSource, new()

List<IEnumerable<T>> organizedRecords = new List<IEnumerable<T>>();
List<T> shortenedRecord = new List<T>();

在这里,我试图创建一个更简洁的对象,它只有 3 个特定字段,而不是记录对象附带的可能的 8 个字段。BU 和 JobNum 在此方法中设置。

foreach (var record in records)
{
    string businessUnit = "research"; //This would vary each loop, not constant as displayed
    string JobNum = "test"       //this would vary each loop, not constant as displayed
    shortenedRecord.Add(new T()
    {
        Cost = record.Cost,
        BU = businessUnit,
        JobNum = jobNum
    });
}
shortenedRecord.OrderBy(o => o.BU).ThenBy(n=>n.JobNum);

在这里,据我所知,现在所有记录都由 BU 缩短和排序,然后是 JobNum。

现在我想将这个有序列表拆分为 BU 特定记录的部分并将其添加到 OrganizedRecords。这样,organizedRecords 的每个元素都是一个特定的 BU。我该怎么做?

例如,shortedRecord 是一个包含 30 个元素的列表,但总共只有 5 个唯一的 BU 值。我想将列表排序并拆分为它们各自的 5 个 BU 值,并将其添加到 OrganizedRecords。

这样:

OrganizedRecords[0] 应该是“公司”记录的列表

OrganizedRecords[1] 应该是“研究”记录的列表

其中企业和研究是 BU 价值观。

我尽力解释。感谢您的任何建议。

标签: c#listlinqienumerable

解决方案


感谢您的建议,我玩弄了一下,我发现它可以在我需要的时候工作。

var query = shortenedRecord.GroupBy(p => p.BU).ToList();
foreach (var group in query)
{
    var ordered = group.OrderBy(x => x.JobNum);
    organizedRecords.Add(ordered);
}

推荐阅读