簡體   English   中英

讀取List &lt;&gt;對象並映射到新列表 <Summary> 使用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所有要匯總的領域,即CompanyCodeBusinessCodeStateCode 您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM