Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用匿名类型进行分组_C#_Linq_Anonymous Types - Fatal编程技术网

C# 如何使用匿名类型进行分组

C# 如何使用匿名类型进行分组,c#,linq,anonymous-types,C#,Linq,Anonymous Types,我从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

我从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“iGroup”不包含“Field2”的定义 并且没有可访问的扩展方法“Field2”接受第一个 找不到类型为“IGrouping”的参数。是否缺少使用 指令或程序集 参考应用程序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:

或者,您可以在for循环中执行此操作:

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

在访问字段之前,您需要选择字段:

var dataItems = dataElements.Where(el => el.Field1 == "DATE")
 .GroupBy(x => new { x.Field2, x.Field3})
 .Select(x=>new {Field2=x.FirstOrDefault().Field2})
 .ToList();
现在您可以访问字段2:

或者,您可以在for循环中执行此操作:

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

正如上面所说,小组不知道Field2是什么,所以你需要抓住小组的每个元素。试试这个:

foreach (var group in dataItems) 
{ 
    foreach(var element in group)
    {
        Console.WriteLine(element.Field2);
    }
}
foreach (var element in dataItems)
{
    Console.WriteLine(element.Key.Field2)
}
可以这样做,因为dataItem本身有Field2。这将遍历每个组的每个元素。如果只想显示组的键,则只需抓取键:

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

正如上面所说,小组不知道Field2是什么,所以你需要抓住小组的每个元素。试试这个:

foreach (var group in dataItems) 
{ 
    foreach(var element in group)
    {
        Console.WriteLine(element.Field2);
    }
}
foreach (var element in dataItems)
{
    Console.WriteLine(element.Key.Field2)
}
可以这样做,因为dataItem本身有Field2。这将遍历每个组的每个元素。如果只想显示组的键,则只需抓取键:

foreach (var group in dataItems) 
{
     Console.WriteLine(group.Key.Field2);
}
您需要先选择键,然后再选择Field2。试试这个:

foreach (var group in dataItems) 
{ 
    foreach(var element in group)
    {
        Console.WriteLine(element.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);
    }
}
foreach (var element in dataItems)
{
    Console.WriteLine(element.Key.Field2)
}

您的代码丢失。请选择。分组后的sql等价物分组后有一个选择缺少哪个部分?.GroupBy.select我不明白你在说什么,你可以添加另一个答案吗?对,他更可能想要每个组的字段2值列表,而不是按两个文件分组后的所有元素,与你的答案相同。你的代码缺少。选择。分组后的sql等价物分组后有一个选择缺少哪个部分?.GroupBy.select我不明白你在说什么,你能再添加一个回答吗?对,他更可能想要每个组的Field2值列表,而不是两个文件分组后的所有元素,和你的答案一样。标题不反映实际问题。标题不反映实际问题。