我有以下输入列表:
**AccountModel.cs**
CompanyCode
BusinessCode
State
我需要通过List< AccountModel >进行迭代并创建以下输出列表< SummaryModel >
**SummaryModel.cs**
RecordCount
CompanyCode
BusinessCode
State
示例输入列表:
{
CompanyCode = "A",
BusinessCode = "AAA",
StateCode = "GA",
},
{
CompanyCode = "A",
BusinessCode = "AAA",
StateCode = "GA",
},
{
CompanyCode = "A",
BusinessCode = "AAA",
StateCode = "TN",
},
{
CompanyCode = "A",
BusinessCode = "AAA",
StateCode = "TN",
},
预期结果:
RecordCount = 2
CompanyCode = A
BusinessCode = AAA
StateCode = GA
RecordCount = 2
CompanyCode = A
BusinessCode = AAA
StateCode = TN
到目前为止,我试图通过使用以下方法来解决这个问题:
IEnumerable<IGrouping<string, string>> query = accountModels.GroupBy(accountModel=> accountModel.CompanyCodeModel, accountModel => accountModel.CompanyCodeModel);
// Iterate over each IGrouping in the collection.
foreach (IGrouping<string, string> companyCodeGroup in query)
{
SummaryModel.CompanyCode = companyCodeGroup.Key;
foreach (var code in companyCodeGroup)
{
SummaryModel.RecordCount++;
}
// Print the record count of the IGrouping.
Console.WriteLine("RecordCount = " + SummaryModel.RecordCount);
Console.WriteLine("CompanyCode = " + SummaryModel.CompanyCode);
Console.WriteLine("BusinessCode = " + SummaryModel.BusinessCode);
Console.WriteLine("StateCode = " + SummaryModel.StateCode);
Console.ReadKey();
实际结果:
RecordCount = 4
CompanyCode = A
BusinessCode =
StateCode =
我此时只编写了公司的分组编码,因此我意识到在本例中我没有为BusinessCode和StateCode打印任何内容。
对某些人来说这可能是显而易见的,但我怎样才能得到我预期的结果呢?
答案 0 :(得分:2)
只需GroupBy
您想要汇总的所有字段,即CompanyCode
,BusinessCode
,StateCode
。
您可以使用GroupBy
中的匿名对象执行此操作。
然后在每个分组上调用Count()
将为您提供记录计数。您可以使用所有这些为每个组合创建SummaryModel
。
List<SummaryModel> summaryModels = accountModels.GroupBy(accountModel => new {
accountModel.CompanyCode
accountModel.BusinessCode
accountModel.StateCode
}).Select(amSummary => new SummaryModel {
CompanyCode = amSummary.Key.CompanyCode,
BusinessCode = amSummary.Key.BusinessCode,
StateCode = amSummary.Key.StateCode,
RecordCount = amSummary.Count()
}).ToList();
答案 1 :(得分:1)
这应该没问题。
accountModels.Distinct().Select(a => new SummaryModel {
CompanyCode = a.CompanyCode,
BusinessCode = a.BusinessCode,
StateCode = a.StateCode,
RecordCount = accountModels.Where(
m => m.CompanyCode == a.CompanyCode && m.BusinessCode = a.BusinessCode && m.StateCode = a.StateCode
).Count()
});