【问题标题】:Getting IGrouping error while creating a list using linq query使用 linq 查询创建列表时出现 IGrouping 错误
【发布时间】:2020-08-16 21:40:41
【问题描述】:

我想在 C# 中创建一个列表,如下所示:

[
      {
         "Total": "11",
        "DocumentTypeName": "MMT",
        "ProceesedDocumentCount": "5",
        "UnProceesedDocumentCount": "6"
      },
      {

        "Total": "11",
        "DocumentTypeName": "CIMIC",
        "ProceesedDocumentCount": "3",
        "UnProceesedDocumentCount": "8"
      },
      {
          "Total": "13,
         "DocumentTypeName": "CROWN",
        "ProceesedDocumentCount": "7",
        "UnProceesedDocumentCount": "6"
      }
     ]

到目前为止我已经尝试过这段代码:

public async Task<ListResultDto<DashboardCountDto>> CountAllTrainDocuments()
            {
                    //var retList = new List<ListOfDocumentTypes>();
                  var allTrainFiles = await _trainDocumentRepository.GetAllListAsync();
                   var CountTrainFiles = allTrainFiles.GroupBy(t=> t.DocumentTypeName).
                                        Select(e => new DashboardCountDto{ 
                                             Total = e.Count(),
                                        DocumentTypeName = e.Key,
                 ProceesedDocumentCount = e.key.Count(g => g.Processed = true),
                 UnProceesedDocumentCount = e.key.Count(g => g.Processed = false),
                
             }).ToList();
              // return retList;
              
               CountTrainFiles.ForEach(
                 row => Console.WriteLine($"DocType: {row.DocumentTypeName}, ProcessedDocument: {row.ProceesedDocumentCount}, UnProcessedDocument: {row.UnProceesedDocumentCount}"));
    
                return new ListResultDto<DashboardCountDto>(CountTrainFiles);
    }

我收到一个错误: IGrouping' 不包含 'key' 的定义,并且找不到可访问的扩展方法 'key' 接受类型为 'IGrouping' 的第一个参数(您是否缺少 using 指令或汇编参考?)

我的 DTO 看起来像:

public class DashboardCountDto : EntityDto<long>
    {
        
        public int Total { get; set; }
        public string DocumentTypeName { get; set; }
        public int ProceesedDocumentCount { get; set; }
        public int UnProceesedDocumentCount { get; set; }
       

    }

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    尝试在Count 之前删除key,就像对DashboardCountDto.Total 所做的那样(假设TrainDocument 具有Processed 属性):

    .Select(e => new DashboardCountDto
    { 
        Total = e.Count(),
        DocumentTypeName = e.Key,
        ProceesedDocumentCount = e.Count(g => g.Processed = true),
        UnProceesedDocumentCount = e.Count(g => g.Processed = false)       
    }
    

    【讨论】:

    • 我尝试了但没有以所需格式创建列表,我希望所有三个“DocumentTypeName”、“ProceesedDocumentCount”、“UnProceesedDocumentCount”作为键。
    • @DikshaAgrawal “作为密钥”是什么意思?
    • 实际上我想在我的仪表板中创建一个组条形图,它可以显示特定文档类型(DocumentTypeName)有多少文档已成功处理(ProceesedDocumentCount)和多少失败(UnProceesedDocumentCount)。所以为此我希望所有三个值都应该以我上面提到的格式出现在 DTO 列表中。
    • @DikshaAgrawal 这是正确填写 DTO 的方法。您应该能够以您想要的方式显示它。
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多