首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linq 'into‘关键字混淆

Linq 'into‘关键字混淆
EN

Stack Overflow用户
提问于 2010-10-04 21:53:47
回答 2查看 28.5K关注 0票数 23

我正在查看一个同事Linq查询,如下所示(该查询可以正确执行):

from ea in EquipmentApplication
join erl in EquipmentRoutingLocation on ea.EquipmentID equals erl.EquipmentID into erlWithNulls

from erlAll in erlWithNulls.DefaultIfEmpty()
join rl in RoutingLocation on erlAll.RoutingLocationID equals rl.RoutingLocationID into rlWithNulls

from rlAll in rlWithNulls.DefaultIfEmpty()
where ea.Equipment.Master_Cell.Area.Unit.UnitID == 1160
select new { ea.Equipment, ea.ApplicationFriendlyName, rlAll }

我搞不懂为什么这是可行的。我的理解(可能是错误的)是,“into”关键字结束了当前的作用域/上下文(现在创建的任何变量都超出了作用域),并创建了一个新的变量。如果这是真的,为什么'ea‘变量仍然在查询的最后一部分的作用域中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-04 21:56:18

当与select关键字一起使用时,into将结束作用域。

当与join关键字一起使用时,into将添加一个变量,其中包含连接中的所有匹配项。(这称为Group Join)

票数 35
EN

Stack Overflow用户

发布于 2013-10-17 03:32:29

为了补充前面已经说过的内容,我想演示由into生成的对象结构与没有into生成的对象结构的差异:

var q = 
    from c in categories 
    join p in products on c equals p.Category into ps 
    select new { Category = c, Products = ps }; 

创建对象图:

Category 1, Products:
  Product 1
  Product 2
Category 2, Products:
  Product 3
  Product 4

在本例中,q只包含两个类别的两个项目。

如果没有into,您将获得一个更传统的连接,它通过创建所有可能的组合来扁平化关系:

var q = 
    from c in categories 
    join p in products on c equals p.Category 
    select new { Category = c, Product = p }; 

Category 1, Product 1
Category 1, Product 2
Category 2, Product 3
Category 2, Product 4

请注意,现在q包含4个项目。

回应评论:

var q = 
    from c in categories 
    join p in products on c equals p.Category into ps 
    select new { Category = c, Products = ps.Select(x=> x.Id) }; 
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3855881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档