2014-09-09 15 views
5

How to: Combin Data with Linq by using joins'daki Örneklere bakın. İlk tutulan kişi nesnelerini (İlk ve Soyadı) iki listeye sahibiz. İkinci Liste, bir kişi nesnesini (evcil hayvan sahibi) tutan Pet nesnelerini (İsim) tutar. Bir Kişi> = 0 evcil hayvana sahip olabilir. Şimdi happend neLinq fazlalık üretir mi?

Ben

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

linqpad bana sonucunu gösterir grup

katılmak gerçekleştirilen bağlıdır: (Linq işten çok üretiyor gibi

LinqPad Output

Bu bana bakıyor ben ama Burada yanlış olabilir!). İlk sonuç nesnesi kişi nesnesini üç kez tutacaktır. Burada iki soru bir Linq nooby olarak karşımıza çıkıyor (ama belki de çıktıyı doğru şekilde okumuyorum):

  1. Kişinin konusu referans mı? Ne yazık ki bu konuda bir şey bulamadım. sorguda yukarıda belirtilen örnekte ardından
  2. biz PetList içinde Kişi Nesne hakkında tüm bilgileri varsa, neden sadece bu nesneyi sorgulamak
Select pers.FirstName , pers.LastName, 
PetName = If(pet is Nothing, String.Empty, pet.Name) 

ile devam ediyor? Benim düşünceme göre, artık Pers'e ihtiyacımız yok.

+0

Burada önemli gerçekler linq ertelenmiş yürütme kullanır ve bu bu fazlalıkların oluşturulmadığı bir biçim olarak derlenmesi gerekir (olabildiğince) – Sayse

cevap

4

Evet, bu Kişiler nesneleri başvurularıdır. LINQ kişi nesnelerini klonlamıyor.

Bu çıktının nedeni, LINQPad'in size o kişinin kim olduğunu göstermeye çalışmasıdır. Özelliklerinin ve alanlarının yürüyüşünü tekrar etmeden, hangi kişiye atıfta bulunduğunu söylemek zor olurdu.

+0

Cevabınız için teşekkürler! Bu, LINQPad'in Key = Person nesnesini gösterdiği, ancak .NET'te oluşturulan acutal nesnede olmadığı anlamına gelir. Sadece kontrol ettim, PetList'te sadece bir evcil hayvan ve bir mülk var. Ben niyetim var ama yine de kafa karıştırıcı. – ruedi