2011-11-15 2 views
7

저는 지난 2 일 동안 LINQ에서 실제 LEFT JOIN을 수행하는 방법을 찾으려고 노력했지만 성공하지 못했습니다. "Primary2Address"열이 포함되어 있고 종종 NULL 일 수있는 사용자 테이블이 있습니다. 여기 LEFT JOIN을해야합니다. 또한 Address 테이블에는 NULL이 될 수있는 더 많은 관계가 있으므로 다중 LEFT JOINS를 수행해야합니다.
모든 LINQ 시도는 UNIONS, 중첩 된 SELECT 문 및 이상한 점으로 일부 심각한 CRAZY SQL 문을 출력합니다. 내가 필요
모든입니다LINQ에서 LEFT JOIN을 엔티티에 연결하는 방법?

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 

도와주세요! 지금까지의 제 해결 방법은 위의 SQL 문을 사용하는 저장 프로 시저를 만드는 것이지만 LINQ (L2E)를 사용하여이 작업을 수행하려고합니다. 감사합니다.

+3

쿼리 그냥 어떻게 다른가'사용자 u'로부터 u.UserName을 선택 EntityFramework 4+ 조인? – svick

답변

18

DefaultIfEmpty 이 왼쪽에 사용됩니다

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

당신은 내 영웅입니다! 와우, 너무 많은 시간을 보낸 후 .... 귀하의 질의는 앞으로 올 때와 똑같습니다. 감사합니다 백만 Aducci! – Losbear

+0

질문에 대한 @ svick의 의견에 따라, 어떻게 'from u from context.UserU.UserName'과 다른가요? – AakashM

+0

@AakashM - 사용자가 주소가 여러 개인 경우 다른 결과가 발생합니다. 더 중요한 것은, 나는 그 질문이 단순화되었다고 생각한다. – Aducci

관련 문제