拆分有序列表

时间:2019-02-05 02:51:52

标签: c# list linq ienumerable

我正在尝试创建列表的排序列表。外部“层”按字段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个特定字段的简洁对象,而不是records对象随附的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的价值。

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

1 个答案:

答案 0 :(得分:0)

感谢您的建议,我开玩笑了一下,发现它可以根据需要工作。

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