为什么我无法访问" item2.UserName"

时间:2014-07-09 12:38:22

标签: c# linq

这是对的 enter image description here 这是错误 enter image description here

from item1 in EL_Course_Courses join item2 in Users on item1.Speaker equals item2.Id into temps 

from item3 in temps group item3 by item1.Name into g 

//from item3 in temps group item3 by item2.UserName into g 

select new {g.Key, Amount=g.Count()}

我想知道为什么我不能按" item2.UserName"

分组

2 个答案:

答案 0 :(得分:2)

你不能因为item2.UserName不是引用temps的随机元素的变量,就像temp3那样。

  

但为什么我可以分组

你可以分组,因为范围变量 - 这个变量的正式名称 - 被称为item1对于集合是可见的,你正试图这样做,而范围变量item2不是。

<强>更新

一个很棒的地方,你可以在其中找到关于范围变量的许多信息以及更多关于LINQ的内部工作原理的Reimplementing LINQ to Objects: Part 41 - How query expressions work,作者是Jon Skeet。

答案 1 :(得分:0)

因为您正在执行group ... into变量temp2仅作为临时变量存在,以便于加入并创建temps

在您的第一个查询中,变量item1存在于group ... into之外。