我正在从一个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 <,dataElements>”不包含“字段2”的定义,并没有可访问的扩展方法“字段2”接受型“IGrouping <,dataElements>”的第一个参数可以发现(是否缺少using指令或程序集引用?)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();
现在你可以访问字段2:
foreach (var element in dataItems)
{
Console.WriteLine(element.Field2)
}
或者你可以在你的for循环:
foreach (var group in dataItems)
{
foreach(var item in group)
Console.WriteLine(item.Field2);
}
您需要Key
前选择Field2
。尝试这个:
foreach (var element in dataItems)
{
Console.WriteLine(element.Key.Field2)
}
因为它说,一群不知道Field2
是什么,所以你需要获取该组的每个元素。尝试这个:
foreach (var group in dataItems)
{
foreach(var element in group)
{
Console.WriteLine(element.Field2);
}
}
这是可以做到,因为dataItem
本身具有Field2
。这将通过各组中的每个元素进行迭代。如果你想只显示组的键,然后只是抓住关键:
foreach (var group in dataItems)
{
Console.WriteLine(group.Key.Field2);
}