我从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>'不包含'Field2'的定义 并且没有可访问的扩展方法“ Field2”接受第一个 可以找到类型为'IGrouping <,dataElements>'的参数(您是否缺少 指令或汇编 参考?)App.Program C:..... cs 498有效
答案 0 :(得分:2)
您需要先选择字段,然后才能访问它们:
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);
}
答案 1 :(得分:2)
您需要先选择Key
,然后再选择Field2
。试试这个:
foreach (var element in dataItems)
{
Console.WriteLine(element.Key.Field2)
}
答案 2 :(得分:1)
正如上面所说,组不知道 <script
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js">
</script>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js">
</script>
<script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js">
</script>
<script type="text/javascript">
$(document).ready(function() {
$('#box,#box1,#box2').draggable({
stack: "div",
distance: 0
});
});
</script>
是什么,因此您需要获取组中的每个元素。试试这个:
Field2
之所以可以这样做是因为foreach (var group in dataItems)
{
foreach(var element in group)
{
Console.WriteLine(element.Field2);
}
}
本身具有dataItem
。这将遍历每个组的每个元素。如果您只想显示组中的键,则只需抓住键即可:
Field2