2011-12-30 3 views
2

다음과 같은 쿼리가 nHibernate에 있습니다. 아이디어는 특정 데이터 그룹의 첫 번째 및 마지막 측정 시간을 얻는 것입니다. 이 데이터베이스 서버 만 요청을 할 수 있도록nHibernate에서 min & max 쿼리 최적화

exec sp_executesql N'select cast(min(measuremen0_.StartTime) as DATETIME) as col_0_0_ from Measurement measuremen0_ where measuremen0_.Category in (@p0 , @p1)',N'@p0 int,@p1 int',@p0=7654321,@p1=3324673 

exec sp_executesql N'select cast(max(measuremen0_.StartTime) as DATETIME) as col_0_0_ from Measurement measuremen0_ where measuremen0_.Category in (@p0 , @p1)',N'@p0 int,@p1 int',@p0=7654321,@p1=3324673 

은 어떻게 든, HQL 사용하지 않고이 를 최적화 할 수 있습니다

var measurements = _session.Query<Measurement>() .Where(x => categories.Contains(x.CategoryId)); first = measurements.Min(o => o.StartTime); last = measurements.Max(o => o.StartTime); 

는 SQL Server 프로파일 러

는 다음과 같은 출력을 제공합니다?

+0

HQL을 사용하지 않는 이유는 무엇입니까? 그것은 당신의 종교 또는 어떤 것에 반대합니까? –

+0

저에게있어 HQL은 SQL을 작성하는 것과 거의 같기 때문에 가독성, IntelliSense 및 ORM (매핑 관계)을 사용하는 전체 요점을 잃어 버렸다고 생각합니다. – Tx3

+0

때때로 저수준 방식으로 (HQL과 같은) 일을해야한다는 것을 인정해야합니다. 아마 이런 종류의 사건일까요? 그러나 나는 사람들이 HQL보다 다른 방법으로 대답을 생각하도록 강요하고 싶다. – Tx3

답변

3

Future Queries을 보셨습니까? 나는 linq 쿼리뿐만 아니라 작동 생각합니다.

+1

나는 그것을 조사하고 최대 및 최소와 결합하는 방법이 될 수 있음을 알려드립니다 – Tx3

+0

선물은 당신에게 데이터베이스로의 왕복을 줄 것이지만 당신에게 질문을 저장하지는 않을 것입니다. 상관 없어요. – Hace

관련 문제