在 foreach 循环中创建多个列表

Creating Multiple List in foreach loop

我有一个包含数据列的列表,我想根据不同客户端代码的数量创建 n 个列表。

ClientCode SerialNo BarCode Remarks
ABC 123 AC123 Ok
ABC 1234 BC123 Ok
ABC 123 ABC123 Failed
ABC 1235 ABC13 Ok
ADF 321 321DFF OK
ADF 321 332DFF OK
AFG 1234 123ADF Ok
AFG 1234 123ADF Ok

并通过ForEach循环 我应该从 List.

中得到 n list(tables) group by
ClientCode SerialNo BarCode Remarks
ABC 123 AC123 Ok
ABC 1234 BC123 Ok
ABC 123 ABC123 Failed
ABC 1235 ABC13 Ok
ClientCode SerialNo BarCode Remarks
ADF 321 321DFF OK
ADF 321 332DFF OK
ClientCode SerialNo BarCode Remarks
AFG 1234 123ADF Ok
AFG 1234 123ADF Ok

我的最终目标是将它们导出到 n 个不同的 excel 文件,但现在我只想获取列表 先做。 这些是我做过的事情

var ExcelGroupByClient = TotalSN.GroupBy(u => u.Data.ClientCode);
foreach (var Record in ExcelGroupByClient)
{
  //My Codes, which I have no idea of what to write.
}

我想不出可以在 ForEach 循环中保存 n 个不同列表的方法

谢谢大家。

我忘了说我的 ExcelGroupByClient 实际上是列表的 Igrouping。 [最终解决方案]

 var ExcelGroupByClient = TotalSN.GroupBy(u => u.Data.ClientCode).ToList();
            
            foreach (var Record in ExcelGroupByClient)
            {
                var Datalist = Record.Select(a => new
                {
                    ClientCode = a.Data.ClientCode,
                    ItemCode = a.Data.ItemCode,
                    SerialNo = a.Data.SerialNo,
                    BarCode = a.Data.BarCode,
                    Errors = String.Join(" ", a.Errors)
                });
            }

下面是一个片段,展示了如何遍历分组:

var list = new List<(string ClientCode, int Number)>
{
    (ClientCode: "ABC", Number: 123),
    (ClientCode: "ABC" , Number: 1235),
    (ClientCode: "ADF" , Number: 321 ),
    (ClientCode: "ADF" , Number: 1234 )
};

var byClient = list.GroupBy( x => x.ClientCode);

foreach( var group in byClient)
{
    Console.WriteLine($"Group's Key: {group.Key}");
    foreach(var record in group)
    {
        Console.WriteLine($"  ClientCode: {record.ClientCode} Number: {record.Number}");
    }
}

这会打印

Group's Key: ABC
  ClientCode: ABC Number: 123
  ClientCode: ABC Number: 1235
Group's Key: ADF
  ClientCode: ADF Number: 321
  ClientCode: ADF Number: 1234

您 post 将您的解决方案输入了问题,您应该 post 一个答案。只是想指出您可以将 foreach 合并到 GroupBy 中,因为 GroupBy 有一个重载,它采用应用于输出的 lambda:

    var groups = TotalSN.GroupBy(
        u => u.Data.ClientCode,  
        rs => rs.Select(a => new
            {
                ClientCode = a.Data.ClientCode,
                ItemCode = a.Data.ItemCode,
                SerialNo = a.Data.SerialNo,
                BarCode = a.Data.BarCode,
                Errors = String.Join(" ", a.Errors)
            }
    );

无论您打算使用数据列表做什么,现在都可以直接应用于 IGrouping

foreach(var datalist in groups){
  foreach(var thing in datalist)
    ...
}

如果您努力为属于集合的事物使用复数或 collection-flavored 名称,为非集合的事物使用单数名称,您将不会感到困惑。您的 Record 实际上仍然是一个集合,因此 Record.Select 读起来有点奇怪,因为 Record 是单数,但 Select 对集合进行操作。

局部变量应该有驼峰命名 -> record