首页 > 解决方案 > 使用 linq 查询创建列表时出现 IGrouping 错误

问题描述

我想在 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<string, TrainDocument>' 不包含“key”的定义,并且找不到接受类型为“IGrouping<string, TrainDocument>”的第一个参数的可访问扩展方法“key”(你是缺少 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

解决方案


key尝试像之前Count一样删除DashboardCountDto.Total(假设TrainDocumentProcessed属性):

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

推荐阅读