2013-12-22 3 views
5

이 람다 식과 관련된 SQL 쿼리가 있는데, 일반적으로이 예제에서보다 많은 조인이 있습니다.람다 식으로 여러 개의 왼쪽 외부 조인

select Table2.a, 
      Table2.b, 
      Table2.c, 
      Table2.d 
    from Table1 
    LEFT OUTER JOIN Table2 
    ON Table2.a = Table1.a and 
     Table2.b = Table1.b and 
     Table2.c = Table1.c 
    LEFT OUTER JOIN Table3 
    ON Table3.b = Table1.b AND 
     Table3.c = Table1.c AND 
     Table3.d = Table1.d 
    where (Table1.a = ValueA) 
    order by Table3.f 

나는이() 람다 식에 참여하기로하고 있어요,하지만 난이 내부 조인 생성하는 것을 SQL 서버 프로파일에보고 나는 LEFT OUTER 조인이 필요합니다.

내가이

var RS = DBContext.Table1.Join(DBContext.Table2, 
    Table1 => new {Table1.a, Table1.b, Table1.c}, 
    Table2 => new {Table1.a, Table1.b, Table1.c}, 
    (Table1, Table2) => new {Table1}) 
.Join(DBContext.Table3, 
    LastJoin => new {LastJoin.Table1.b, LastJoin.Table1.c, LastJoin.Table1.d}, 
    Table3 => new {Table3.b, Table3.c, Table3.d}, 
    (LastJoin,Table3) => new {LastJoin.Table1, Table3}) 
.Where (LastTable => LastTable.Table1.a == ValueA) 
.OrderBy(LastTable => LastTable.Table3.f) 
.Select (LastTable => new {LastTable.Table1, LastTable.Table3}); 

내가이 DefaultIfEmpty() 또는 GroupJoin (함께 할 수있는 것을 읽고있다) (가입으로하고있어)하지만 난 어떤 복잡한 예제를 찾을 수있는 방법입니다 하나 이상의 LEFT OUTER JOIN.

+0

어떤 탐색 속성을 표시 할 수 있습니까? 'orderby table1.Table3.f'와 같은 구문을 사용할 때 훨씬 쉽습니다. –

+0

안녕하세요, 내 람다 표현 도스 람다 표현의 끝에 선택 이유는 엔터티의 모든 필드를 원하기 때문에 그것을 나타내지 않습니다. – JuanDYB

+0

왼쪽 조인을 사용하여 쿼리를 작성하는 방법을 알고 있으므로 직접 호출하거나 저장된 proc에 넣고 호출하는 것이 어떻습니까? – HLGEM

답변

3

linq 쿼리를 사용해 보시지 않으시겠습니까? 람다 식과 비교하여 두 가지를 모두 작성하고 이해하는 것이 훨씬 쉽습니다. 다음과 같은 구현을했습니다 :

var products = 
     from p in this.Products 
     from cat in this.ProductCategoryProducts 
     .Where(c => c.ProductID == p.ProductID).DefaultIfEmpty() 

     from pc in this.ProductCategories 
     .Where(pc => ac.ProductCategoryID == cat.ProductCategoryID).DefaultIfEmpty() 

     where p.ProductID == productID 
     select new 
     { 
      ProductID = p.ProductID, 
      Heading = p.Heading,     
      Category = pc.ProductCategory 
     }; 
    return products ;