Entity Framework에서이 작업을 수행하려면 어떻게해야합니까?

c# entity-framework linq linq-to-entities

문제

서로 관계가있는 2 개의 테이블이 있습니다.

테이블 A는 테이블 B와 1 대 다수의 관계를 가지므로 각 테이블에 탐색 속성을 만듭니다.

이제 표 A (userName)의 값을 확인해야하며 표 B (ClubId)의 값을 확인해야합니다.

그래서 내 마음 속에는 뭔가있을거야.

Join the tables together
Where A.userName == "bob" &&
where B.clubId == "Car"

// return the count.

하지만 이제 엔티티 (Entity)에 대해서는 조인이 덜 일반적이라는 것을 알고 있으므로 조인으로 할 수 있는지 궁금합니다.

나는 이것을 시험해 보았다.

int count = Entity.TableA.where(a => a.userName == "bob" && a.TableB.where(i => i.ClubId == "Car")).Count();

그래서 이것은 올바른 타입을 반환하지 않을 것이기 때문에 작동하지 않습니다 (2 번째 위치). 이것은 제가 어떻게하면 그것이 행해질 것이라고 기대할 것인가를 생각해 보았습니다.

어떻게 보일까요?

추신

오히려 내가 한 것처럼 Linq 메서드 쿼리에서 수행 된 예제가 있습니다.

수락 된 답변

조인 전에 TableA 를 필터링하는 것이 더 효율적입니다.

var clubs = from a in Entity.TableA
            where a.userName == "bob"
            from b in a.TableB
            where b.clubId == "Car"
            select b;

var count = clubs.Count();

두 변수를 사용할 필요가 없습니다. 명확성을 위해 필자가 선호하는 것입니다.

또는 메소드 구문에서 약간을 단순화 할 수 있습니다.

var count = Entity.TableA.Where(a => a.userName == "bob")
                         .SelectMany(a => a.TableB)
                         .Count(b => b.clubId == "Car");

그러나 EF가 이러한 특정 표현을 이해하는지 확신 할 수 없습니다. 그렇지 않다면 컴파일러는 위 쿼리를 다음과 같이 변환합니다.

var count = Entity.TableA.Where(a => a.userName == "bob")
                         .SelectMany(a => a.TableB, (a,b) => new { a, b })
                         .Where(x => x.b.clubId == "Car")
                         .Count();

인기 답변

EF 모델이 사용자와 클럽 간의 관계를 가지고 있다고 가정하면 다음과 같이 할 수 있습니다.

var usersNamedBobInCarClub = 
             from A in User
             from B in A.Clubs
             where A.userName == "bob" &&
                   B.clubId == "Car"
             select A;

사용자와 클럽 모두의 반환 요소를 원한다면 쿼리 내에서 조인을 살펴보십시오.



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.