2010-06-01 3 views
4

한 데이터베이스의 정보를 가져 와서 다른 데이터베이스의 정보와 조인하는 쿼리를 작성하려고합니다.LINQ에서 조건부 조인?

TableA 
idA 
valueA 
idB 

TableB 
idB 
valueB 

까다로운 부분은 TableA의에서, IDB는 항상 정의되지 않는 것입니다, 그래서 정상적인 가입 할 때 TableA의가 IDB 값이 경우, 나는 단지 결과를 얻을 수 있습니다. 내가 원하는 것은 해당 idB 값이 없더라도 TableA의 모든 정보를 가져올 수 있다는 것입니다.

답변

5

다음은 tvanfosson의 대답에 대한 후속 작업을 수행하는 왼쪽 조인의 쿼리 식 구문 버전입니다.

var query = from rowA in db.TableA 
      join rowB in db.TableB 
      on rowA.idB equals rowB.idB into b 
      from item in b.DefaultIfEmpty() 
      select new 
      { 
       idA = rowA.idA, 
       valueA = rowA.valueA, 
       idB = rowA.idB, 
       valueB = item != null ? item.valueB : 0 // or other default value 
      }; 
3

오른쪽 외부에서 반환 된 값이 null인지 확인하고 해당 대소 문자의 기본값을 제공하여 왼쪽 외부 조인을 사용합니다. 당신은 왼쪽 외부 작업을 수행 할 수 있습니다

var q = db.TableA.Join(db.TableA, 
         a => a.idB, 
         b => b.idB, 
         (a,b) => new 
            { 
             A = a.ValueA, 
             B = b == null ? null : b.ValueB 
            }); 
+0

좋습니다. 나는 항상 왼쪽 조인과 조인의 차이점이 무엇인지 궁금했고, 이제는 알고 있습니다! 감사! – sooprise

0

join ... intoSelectMany와 (직접 Queryable 메소드를 호출) 또는 이해 구문에 LINQ에 참여 : 출력에서 ​​

var results = from a in db.TableA 
       join b in db.TableB on a.idB equals b.idB 
       into found 
       select new { 
       A = a, 
       Bs = found 
       }; 

BsIEnumerable<typeof-db-TableB>

0

왼쪽 가입됩니다 예 :

var leftOuterJoinQuery = 
    from category in categories 
    join prod in products on category.ID equals prod.CategoryID into prodGroup 
    from item in prodGroup.DefaultIfEmpty(new Product{Name = String.Empty, CategoryID = 0}) 
     select new { CatName = category.Name, ProdName = item.Name }; 
+2

MSDN의 뻔뻔한 사본/붙여 넣기) –

+0

잘 작동하고 내 첫 LINQ 경험에 도움이되었습니다. –