我正在尝试创建列表的排序列表。外部“层”按字段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的价值。
我尽力解释。感谢您的任何建议。
答案 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);
}