[英]Need help creating Linq.Expression to Enumerable.GroupBy
[英]Read List<> object and map to new List<Summary> Object using Enumerable.GroupBy
我有以下輸入列表:
**AccountModel.cs**
CompanyCode
BusinessCode
State
我需要遍歷List < AccountModel >並創建以下輸出List < 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打印任何內容。
這對於某些人可能是顯而易見的,但是我如何獲得預期的結果呢?
剛剛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();
沒關系
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()
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.