Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取列表对象并使用Enumerable.GroupBy映射到新列表对象_C#_List - Fatal编程技术网

C# 读取列表对象并使用Enumerable.GroupBy映射到新列表对象

C# 读取列表对象并使用Enumerable.GroupBy映射到新列表对象,c#,list,C#,List,我有以下输入列表: **AccountModel.cs** CompanyCode BusinessCode State 我需要遍历列表并创建以下输出列表 输入列表示例: { CompanyCode = "A", BusinessCode = "AAA", StateCode = "GA", }, { CompanyCode = "A", BusinessCode = "AAA",

我有以下输入列表:

    **AccountModel.cs**
    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();
我现在只为公司编码了分组,所以我意识到在这个示例中,我没有打印任何关于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();
只需按所有要汇总的字段分组,即公司代码、业务代码、状态代码。 您可以使用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()
});
这应该没问题

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()
});

meList.GroupBye=>newaccountmodel{CompanyCode=e.CompanyCode,BusinessCode=e.BusinessCode,StateCode=e.StateCode},e=>meList.Counten=>en==e;应返回带有发生次数计数但未验证的AccountModel:meList.GroupBye=>new AccountModel{CompanyCode=e.CompanyCode,BusinessCode=e.BusinessCode,StateCode=e.StateCode},e=>meList.Counten=>en==e;应返回带有发生次数计数的AccountModel,但未经验证:如果已经存在.GroupBy函数并且问题已经在尝试使用它,则我不会重新创建手动分组的控制盘。不是向下投票,而是向上投票@rhumborl这不是分组。将元素分组在一起,这一个正在计数。是的,您的代码没有分组,但问题是试图分组,看起来他想使用iGroup上的手动计数获得摘要。我想知道如果后面有数据库的话,您的答案是否符合性能要求。它会转换成子查询吗?老实说,另一个aswer肯定不会翻译成子查询。即使后面没有数据库,这种方法也不符合性能要求。但是,如果有人非常关心性能,那么诚实地说C也不是最好的选择。将错误的linq to sql、entity framework或其他ORM查询写入一个包含100k+记录的数据库,而不管它是用什么语言编写的。我将14小时的运行过程缩短为12分钟,只修复了用于加载数据的查询。在“相当大的表”中有显式子查询。顺便说一句,当时的罪魁祸首是PL/SQL,而不是C.:-如果已经有了.GroupBy函数,并且问题已经在尝试使用它,我不会重新发明手动分组的轮子。不是向下投票,而是向上投票@rhumborl这不是分组。将元素分组在一起,这一个正在计数。是的,您的代码没有分组,但问题是试图分组,看起来他想使用iGroup上的手动计数获得摘要。我想知道如果后面有数据库的话,您的答案是否符合性能要求。它会转换成子查询吗?老实说,另一个aswer肯定不会翻译成子查询。即使后面没有数据库,这种方法也不符合性能要求。但是,如果有人非常关心性能,那么诚实地说C也不是最好的选择。将错误的linq to sql、entity framework或其他ORM查询写入一个包含100k+记录的数据库,而不管它是用什么语言编写的。我将14小时的运行过程缩短为12分钟,只修复了用于加载数据的查询。在“相当大的表”中有显式子查询。顺便说一句,当时的罪魁祸首是PL/SQL,而不是C:-