2011-11-15 15 views
7

Son 2 günü, LINQ içinde gerçek bir SOL JOIN nasıl yapılacağını bulmaya çalıştım ve başarılı olamadım. İçinde bir "Primary2Address" sütunu bulunan ve genellikle NULL olabilecek ve kullanabilen bir kullanıcı tablom var. bu yüzden burada bir SOL JOIN yapmak zorundayım. Ayrıca, Adres tablosunda, NULL olabilecek daha fazla ilişki var, bu yüzden birden çok SOL JOINS yapmalıyım.
Her LINQ denemesinde UNIONS, iç içe SELECT ifadeleri ve daha tuhaf şeyler ile bazı CIOZLY CRAZY sql deyimleri çıktılar. ihtiyacım
tek şey:LINQ'te Varlıklara LEFT JOIN nasıl yapılır?

SELECT u.UserName FROM Users u 
LEFT JOIN Addresses a ON a.AddressiD = u.Primary2Address 
LEFT JOIN States s ON s.StateID = a.Address2State 
LEFT JOIN Countries c ON c.CountryID = a.CountryID 

yardım edin! Şimdiye kadar yaptığım çalışma, yukarıda sql ifademi kullanan saklı bir yordam oluşturmaktı, ancak bunu LINQ (L2E) ile yapmayı gerçekten çok isterim. Teşekkürler çocuklar!

+3

sorgu sadece Farkı Nedir 'Kullanıcılar u' DAN u.UserName SEÇ EntityFramework 4+ için katılır? – svick

cevap

18

DefaultIfEmpty sol için kullanılır

var query = from u in context.Users 
      from a in context.Addresses 
          .Where(x => u.Primary2Address == x.AddressiD) 
          .DefaultIfEmpty() 
      from s in context.States 
          .Where(x => a.Address2State == x.StateID) 
          .DefaultIfEmpty() 
      from c in context.Countries 
          .Where(x => a.CountryID == x.CountryID) 
          .DefaultIfEmpty() 
      select u.UserName; 
+0

Sen benim kahramanımsın! Vay, saatlerce sonra .... Sorgunuz geldikleri kadar düz ve şimdi anlıyorum. Bir milyon Aducci'ye teşekkürler! – Losbear

+0

Soruya @ svick'in yorumuyla ilgili olarak, bu, bağlamdan u 'dan farklıdır. Kullanıcılar u.UserName'i seçer? – AakashM

+0

@AakashM - Herhangi bir kullanıcının birden fazla adresi varsa, farklı bir sonuç alırsınız. Daha da önemlisi, sorunun basitleştirildiğini düşünüyorum. – Aducci