2014-03-19 2 views
2

가능한 경우 기존의 DB에 비해 엔티티 프레임 워크를 선호하는 IHAC (스키마를 변경하면 문제가되지 않음). 나는 A id가 주어진 고유 E 요소 목록을 얻으려고합니다. 저는 MS Entities에 익숙하지 않습니다. 그리고 어떻게 처리 할 것인가? (이 그룹이 그들과 함께하고있는 복잡한 것들 중 일부는 얼음 위의 snot보다 느리다.)하지만 내가 건네 준 것.엔티티 프레임 워크 - 1 ~ ~ ~ 1 대다수 선택

다음은 빠른 다이어그램입니다. db example diagram 이것은 내 DB 설계가 아닙니다!

SELECT E.e_Id, E.e_Name 
FROM 
    A, 
    B, 
    C, 
    D, 
    E 
WHERE 
    A.a_Id = 'someid' 
    AND A.a_Id = B.a_Id 
    AND B.b_Id = C.b_Id 
    AND C.d_Id = D.d_Id 
    AND D.e_Id = E.e_Id 
GROUP BY E.e_Id, E.e_Name 

단계별, 나는 테이블 D 엔티티를 얻을 수 있습니다,하지만 난에 도착하는 방법을 알아낼 수 없습니다 : 질문자 : 여기

을 쏘지 마세요하면 SQL이다 나는 쓸 것 E 엔티티 :

 var bLocal = context.AEntities 
      .Where(a => a.a_Id == 'someid') 
      .Select(b => b.B); 

     var dLocal = bLocal 
      .SelectMany(b => b.D); 

     var eLocal = dLocal. ???? 
       - OR? - 
     var eLocal = context.EEntities ??? 
+0

쿼리 구문을 사용하여 linq에서 하나의 명령문에서 여러 개의 from을 수행 할 수 있습니다. 'table1의 t1에서 table2의 t2에 이르기까지. – Silvermind

+0

@ Silvermind, 그는 단지 데카르트 제품을 만들지 않고 내부 조인 (SQL92)보다는 SQL 조인을 위해 구식 SQL89 형식을 사용하고 있습니다. – paqogomez

+0

@rcarver, 내 대답은 작동 했습니까? 다른 질문이 있으십니까? – paqogomez

답변

2

꽤 똑바로 앞으로 LINQ에 당신의 SQL입니다 번역 :

var results = (from a in A 
       join b in B on a.a_Id equals b.a_Id 
       join c in C on b.b_Id equals c.b_Id 
       join d in D on c.d_Id equals d.d_Id 
       join e in E on d.e_Id = e.e_Id 
       where a.a_Id == 'someid' 
       group e by new { e.e_Id, e.e_Name } 
       select e) 

당신이 같을 것이다 방법 체인하고 싶었던 경우 : 개인적으로

var results = (A.Join(B, a => a.a_Id, b => b.a_Id, (a, b) => new {a, b}) 
    .Join(C, @t => b.b_Id, c => c.b_Id, (@t, c) => new {@t, c}) 
    .Join(D, @t => c.d_Id, d => d.d_Id, (@t, d) => new {@t, d}) 
    .Join(E, @t => d.e_Id = e.e_Id, e => , (@t, e) => new {@t, e}) 
    .Where(@t => a.a_Id == 1) 
    .GroupBy(@t => new {e.e_Id, e.e_Name}, @t => e) 
      select e) 

을 .. 나는 것 스틱 쿼리 문법 완전한 공개, ReSharper는 방법 연쇄 변환을 그렇게 가능하게 만들었습니다. 그것은 더 예쁘 수 있습니다.

+0

어디에 있나?'(A.a_Id == 'someid')' – Kevin

+0

고객이 LINQ를 사용하지 않는다. (나는 EF/Linq에 익숙하지 않다. 엔티티 모델에서 볼 수있는 관계 테이블 C는 탐색 속성을 통해 간접적으로 표현되는 관계형 테이블 C가 직접적으로 표현되지 않습니다. 그래서이 LINQ 쿼리를 수행하는 방법을 볼 수 없습니다. – rcarver

+0

@rcarver SQL, linq에서 할 수 있습니다. 만약' C'는 단지'B'와 연결되어 있습니다.'B'는'C' join을 할 필요가 없습니다. 그냥'B' join에 제약을 추가하십시오. '&& b. .c_Id == d.c_Id' – paqogomez

0

모든 탐색 속성이 있습니까? 나는. dLocal.E을 사용하여 탐색 할 수 있습니까? 그렇지 않은 경우 context.EEntities.Where(e => e.e_Id == dLocal.e_Id)을 사용하십시오 (대신 Single()을 사용하십시오).

+0

잘게 그것이 파괴되는 곳입니다. 관계는 있지만 거기에는 많은 D가 있고 나는 많은 것을 원합니다. E만이 고유 한 것일 뿐이므로 – rcarver

관련 문제