在 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
我有一个包含数据列的列表,我想根据不同客户端代码的数量创建 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 byClientCode | 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