我从linq查询中获取结果集,然后使用group by对两个字段进行分组:

var dataElements = dataElements.GetAll();

var dataItems = dataElements.Where(el => el.Field1 == "DATE")
     .GroupBy(x => new { x.Field2, x.Field3})
     .ToList();

//why can't I do this:
foreach (var element in dataItems)
{
    Console.WriteLine(element.Field2)
}


我收到以下错误:


  严重性代码说明项目文件行抑制状态
  错误CS1061'IGrouping '不包含'Field2'的定义
  并且没有可访问的扩展方法“ Field2”接受第一个
  可以找到类型为'IGrouping '的参数(您是否缺少
  指令或汇编
  参考?)App.Program C:.... cs 498有效

最佳答案

您需要先选择字段,然后才能访问它们:

var dataItems = dataElements.Where(el => el.Field1 == "DATE")
 .GroupBy(x => new { x.Field2, x.Field3})
 .Select(x=>new {Field2=x.FirstOrDefault().Field2})
 .ToList();


现在您可以访问Field2:

foreach (var element in dataItems)
{
  Console.WriteLine(element.Field2)
}




另外,您也可以在for循环中执行此操作:

foreach (var group in dataItems)
{
  foreach(var item in group)
     Console.WriteLine(item.Field2);
}

关于c# - 如何使用匿名类型分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54603368/

10-12 15:36