2009-09-10 2 views
11

having 절을 포함하는 엔터티 쿼리에 linq을 쓰려면 어떻게해야합니까? 예를 들어Entity Framework T-Sql "equivalent"having "

:

SELECT State.Name, Count(*) FROM State 
INNER JOIN StateOwner ON State.StateID = StateOwner.StateID 
GROUP BY State.StateID 
HAVING Count(*) > 1 

답변

22

단지 결과에 where 절을 사용하지 않는 이유라도?

var query = from state in states 
      join stateowner in stateowners 
       on state.stateid equals stateowner.stateid 
      group state.Name by state.stateid into grouped 
      where grouped.Count() > 1 
      select new { Name = grouped.Key, grouped.Count() }; 
+0

Dammit Jon .... 하하 ... 다시 이겼어! <3> – womp

+5

grouped.Any()가 Count()> 0이 아닌 Count()> 1에 사용됩니다. – Lucas

+2

@Craig : 'Count()> 0'이면 제한이 필요 없습니다. 모든 것은 그것이 내적 조인이라는 것을 감안하면 ... –

3

나는 당신이 Where 절 다음에 GroupBy를 사용할 수 있다고 생각하고 그것은 Having로 변환합니다. 그러나 완전히 확실하지는 않습니다.

+2

MySql의 경우, WHERE가 아닌 내부 SELECT가 발생합니다 (HAING이 아님). 그래서 성능 문제가 발생할 것입니다. – Yuri