AND
이 아닌 조건이 OR
인 여러 조건에서 왼쪽 조인을 수행해야합니다. 후자의 샘플을 많이 찾았지만 내 시나리오에 대한 올바른 대답을 얻으려고 애 쓰고 있습니다.Linq - 다중 (OR) 조건에 왼쪽으로 결합
from a in tablea
join b in tableb on new { a.col1, a.col2 } equals new { b.col1, b.col2 }
group a by a into g
select new() { col1 = a.col1, col2 = a.col2, count = g.Count() }
은 모든 조건이 일치해야하는 조인에 좋습니다. 조인을 on a.col1 = b.col1 OR a.col2 = b.col2
과 일치시켜야합니다.
나는 그것이 쉬워야한다라는 것을 알고있다. 그러나 나는 이것 위에서 비어있게되었다!
는편집 :
좀 더 많은 정보를 제공하기 위해, 쿼리의 목적은 'A' 'B'에 일치하는 레코드의 카운트 플러스에서 모든 필드를 포함하는 투사를 얻는 것입니다. 위의 샘플을 수정하여 내가 무엇을하고 있는지 보여줍니다. Jon Skeet의 접근법을 사용하여 위와 같이 실행하면 b의 관련 레코드 수가 아닌 모든 레코드의 수가 증가합니다.
from a in tablea
from b in tableb
.Where(b => (a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty()
select new { col1 = a.col1, col2 = a.col2 }
내가
from a in tablea
from b in tableb
.Where(b => (a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty()
group a by a.col1 into g
select new { col1 = g.Key, count = g.Count() }
이하 나는 레코드의 수를 얻고으로 그룹을 추가 할 그것을 수정하는 경우가에서 반환 -하지 :
기본 왼쪽은 좋은 작품에 참여 일치하는 레코드의 수 b.
편집: 나는 존에 대한 답을주지
- 나는 나의 카운트 문제를 해결했습니다 - 내가 개수 (g.Count(x => x != null))
를 필터링 할 람다를 사용할 수 있습니다 실현하지 않았다. 게다가 위에서 b와 같이 a를 b로 묶어야합니다. 이것은 정확한 결과를 제공하지만 SQL은 상관 관계가있는 하위 쿼리를 추가 할 때 손으로 쓰는 것만 큼 효율적이지 않습니다. 다음 SQL을 시뮬레이트하기 위해 더 나은 방법을 조언 할 수 있다면 감사하겠습니다.
select a.col1, count(b.col1)
from tablea a
left join tableb b
on a.col1 = b.col1
or a.col2 = b.col2
group by a.col1
그룹화하지 않고 * 내 쿼리 *를 시도하고 그 결과가 원하는지 확인하십시오. 그렇다면 그룹화가 실패한 이유를 찾으십시오. 아마도'new {a.col1, a.col2} '에 의해 그룹화 할 것인가? –
기본 왼쪽 조인 선택으로 잘 작동합니다. 그룹핑에서 카운트를 얻는 것이 이것이 기본 동등 조인이라면 기대했던대로 작동하지 않습니다. 위의 추가 정보에 유의하십시오. –