2014-09-09 57 views
5

Mi riferisco agli esempi in How to: Combin Data with Linq by using joins. Abbiamo due elenchi il primo detiene oggetti persona (Primo e Cognome). La seconda lista contiene oggetti Pet (Nome) che contengono un oggetto persona (proprietario dell'animale domestico). Una persona può possedere> = 0 animali domestici.Linq produce ridondanze?

Cos'è successo ora è ho eseguito il gruppo si uniscono

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

LINQPad mi mostra il risultato:

LinqPad Output

Questo sembra a me come LINQ sta producendo un sacco di licenziamenti (ma io potrebbe essere sbagliato qui!). Il primo oggetto risultato manterrebbe l'oggetto persona tre volte. Qui sorgono due domande per me come Linq nooby (ma forse ho letto l'output non nel modo giusto):

  1. Le referenze degli oggetti persona sono? Purtroppo non ho trovato nulla a riguardo.
  2. Seguendo l'esempio di cui sopra la query prosegue con
Select pers.FirstName , pers.LastName, 
PetName = If(pet is Nothing, String.Empty, pet.Name) 

Se abbiamo tutte le informazioni relative all'oggetto Persona nel PetList, perché non basta interrogare questo oggetto? Secondo me, non abbiamo più bisogno dell'oggetto pers.

+0

Penso che i fatti chiave qui sono linq utilizza l'esecuzione posticipata e questo dovrebbe essere compilato in un formato che significa che queste ridondanze non sono create (il più possibile) – Sayse

risposta

4

Sì, quegli oggetti Persona sono riferimenti. LINQ non sta clonando oggetti Person.

Il motivo di tale output è che LINQPad sta cercando di mostrare chi è quella persona. Senza ripetere una passeggiata delle sue proprietà e dei suoi campi, sarebbe difficile dire a quale persona si riferiva.

+0

Grazie per la risposta! Ciò significa che LINQPad mostra l'oggetto Key = Person ma non è nell'oggetto acutal generato in .NET? Ho appena controllato che c'è solo un animale domestico e una proprietà proprietario in PetList. Ottengo l'intenzione, ma è ancora confusa. – ruedi