2011-01-12 4 views
11

이 간단한 SQL 쿼리는 LINQ에서 시도 할 때 상당히 혼란 스럽습니다.`MIN (ZoneMin), MAX (ZoneMin) FROM Plant`를 LINQ에서 SQL로

나는 Plant 테이블에 ZoneMin이라는 SQL 테이블이 있습니다.

열에있는 값의 최소값과 최대 값을 찾고 싶습니다.
T-SQL의 대답은 매우 간단합니다 :

SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant

무슨 날이 얻을 수있는 LINQ 쿼리 (또는 유사) SQL?

나는 행운을 비으며 .Aggregate() 및 .GroupBy()에서 다양한 시도를했습니다. 비슷한 것으로 보이는 몇 가지 질문을 살펴 보았습니다.

이것은 결과 배열에 적용된 메서드를 사용하여 간단히 얻을 수 있지만 T-SQL에서 매우 간단한 경우 모든 SQL 행의 값을 전송할 필요가 없습니다.

답변

14

원래 쿼리와 동일한 성능을 얻으려면 영향을 최소화하기 위해 상수로 그룹화 (예 : 0)를 사용해야하므로 동일한 쿼리에서 동일한 레코드 집합을 두 번 참조 할 수 있습니다. 테이블 이름을 사용하면 각 참조에서 u로운 u 리가 작성됩니다. 다음을 시도해보십시오 :

(from plant in db.Plants 
group plant by 0 into plants 
select new { Min = plants.Min(p => p.ZoneMin), Max = plants.Max(p => p.ZoneMin) } 
).Single() 

이 다음 쿼리 생성합니다

SELECT MIN(plants.ZoneMin), MAX(plants.ZoneMin) 
FROM (SELECT 0 AS Grp, ZoneMin FROM Plants) AS plants 
GROUP BY plants.Grp 

그리고 최적화가 함께 수행 한 후, 그 쿼리에 상응하는 뭔가를 뱉어

, 적어도 SQL Server 관리 Studio에 따라 .

+0

멋지게 완료되었습니다. Allon, 고마워. 나는 "속임수로"그룹을 시도하는 것을 잊는 경향이있다. – Peter

+2

@Peter : 그러면 나보다 앞서 - 질문을 조사하기 전에이 트릭에 대해 들어 본 적도 없습니다. –

관련 문제