C# 加入Linq
当我宣布C# 加入Linq,c#,linq,C#,Linq,当我宣布 int[] a = { 1, 2 ,10,30}; int[] b = { 10, 20, 30 }; var q = from item1 in a join item2 in b on item1 equals item2 into g select g 1) 什么是真正被选入g?很难将理解为关键字。如
int[] a = { 1, 2 ,10,30};
int[] b = { 10, 20, 30 };
var q = from item1 in a
join item2 in b
on item1 equals item2
into g
select g
1) 什么是真正被选入g?很难将理解为关键字。如果你举个例子把关键字”解释成“
,我会很高兴的
(二)
在第2行中,我们使用“b”选择项目
在第3行中,我们也使用相同的b,这是否意味着我们覆盖了我们选择的数据
在第2行?1)您正在执行a。g
将是a
g中每个元素的i分组。Key
将是a
中的元素,而g
(实现IEnumerable
)将包含b
中的所有匹配元素。要完全理解这一点,请在中尝试。另外,请阅读
2) into
关键字将第一个b
合并到b_join
,这将是一个I分组
。之后,第一个b
不再在范围内。如果对编译的代码使用.NET Reflector,您可以看到第一个查询相当于以下内容:
IEnumerable<IEnumerable<int>> q = a.GroupJoin(b,
item1 => item1,
item2 => item2,
(item1, group) => group);
IEnumerable q=a.GroupJoin(b,
item1=>item1,
item2=>item2,
(项目1,组)=>组);
请注意,您正在执行组联接,但仅返回组。请将其与普通联接进行比较:
IEnumerable<int> q = a.Join(b,
item1 => item1,
item2 => item2,
(item1, item2) => item2);
IEnumerable q=a.Join(b,
item1=>item1,
item2=>item2,
(第1项、第2项)=>第2项;
这将返回b中与每个a匹配的元素(如果存在任何此类元素)
IEnumerable<int> q = a.Join(b,
item1 => item1,
item2 => item2,
(item1, item2) => item2);