C# Linq是否会产生冗余?
我参考了中的例子。我们有两个列表,第一个包含person对象(first-name和Lastname)。第二个列表包含宠物对象(名称),其中包含个人对象(宠物所有者)。一个人可以拥有>=0只宠物 现在发生的事情是我参加了这个小组C# Linq是否会产生冗余?,c#,vb.net,linq,linqpad,C#,Vb.net,Linq,Linqpad,我参考了中的例子。我们有两个列表,第一个包含person对象(first-name和Lastname)。第二个列表包含宠物对象(名称),其中包含个人对象(宠物所有者)。一个人可以拥有>=0只宠物 现在发生的事情是我参加了这个小组 Dim result1 = From pers in people Group Join pet in pets on pers Equals pet.Owner Into PetList = Gr
Dim result1 = From pers in people
Group Join pet in pets
on pers Equals pet.Owner
Into PetList = Group
LinqPad向我显示了结果:
在我看来,Linq产生了大量冗余(但我可能错了!)。第一个结果对象将持有person对象三次。作为一名Linq nooby,我在这里遇到了两个问题(但也许我阅读输出的方式不正确):
如果我们在PetList中有关于Person对象的所有信息,为什么不直接查询这个对象呢?在我看来,我们不再需要这个物体了 是的,这些Person对象是引用。LINQ没有克隆Person对象
产生这种输出的原因是LINQPad试图向您展示那个人是谁。如果不重复它的属性和字段,就很难知道它指的是什么人。我认为这里的关键事实是linq使用延迟执行,这应该被编译成一种格式,这意味着这些冗余不会被创建(尽可能多),谢谢你的回答!这意味着LINQPad显示Key=Person对象,但它不在.NET中生成的acutal对象中?我刚刚检查过,宠物列表中只有一只宠物和一个主人的财产。我明白你的意图,但还是让人困惑。
Select pers.FirstName , pers.LastName,
PetName = If(pet is Nothing, String.Empty, pet.Name)