Linq是否会产生裁员?

时间:2014-09-09 08:15:45

标签: c# vb.net linq linqpad

我参考How to: Combin Data with Linq by using joins中的示例。我们有两个列表,第一个持有人物对象(名字和姓氏)。第二个List包含持有人物对象(宠物主人)的宠物对象(名称)。一个人可以拥有> = 0个宠物。

现在发生的事情是我执行了群组加入

Dim result1 = From pers in people
            Group Join pet in pets
            on pers Equals pet.Owner
            Into PetList = Group

LinqPad向我展示了结果:

LinqPad Output

在我看来,Linq正在产生大量裁员(但我可能在这里错了!)。第一个结果对象将三次保持person对象。这里出现了两个问题作为Linq nooby(但也许我读的输出不正确):

  1. 此人是对象引用吗?不幸的是我找不到任何关于它的东西。
  2. 按照上面提到的示例,查询继续
  3. Select pers.FirstName , pers.LastName,
    PetName = If(pet is Nothing, String.Empty, pet.Name)
    

    如果我们在PetList中有关于Person对象的所有信息,为什么不只是查询这个对象?在我看来,我们不再需要pers Object了。

1 个答案:

答案 0 :(得分:4)

是的,那些Person对象是引用。 LINQ没有克隆Person对象。

输出的原因是LINQPad试图告诉你那个人是谁。如果不重复其属性和字段的行走,就很难分辨它指的是什么。