我从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/