Castle ActiveRecord를 사용한 집계 쿼리
-
10-07-2019 - |
문제
집계 결과와 추가 열을 반환하는 간단한 집계 쿼리를 수행하려고합니다. 이 게시물 -> Castle ActiveRecord가있는 사용자 정의 쿼리 이것을 달성하는 방법에 대한 좋은 예를 가지고 있었지만, 나는 그것을 작동시킬 수는 없습니다. activerecordmediator.executeQuery는 객체의 배열 목록을 반환하는 것 같습니다 (내가 기대할 수있는 객체 []의 배열 목록 대신). 또한 ICollection에 캐스팅하려고하면 유효하지 않은 캐스트에 대해 런타임 오류가 발생합니다. 아래 코드는 도움을 주었습니다 (손으로 작성된 SQL을 사용하고 싶지 않음).
HqlBasedQuery query = new HqlBasedQuery(typeof(Something), @"select count(1),
p.Name from Something p
where p.SomeDate > :date
order by p.Name
group by p.Name");
query.SetParameter("date", new DateTime(2009, 1, 1));
var results = from summary in
(ICollection<object[]>)ActiveRecordMediator.ExecuteQuery(query)
select new {
Count = (int)summary[0], Name= (string)summary[1]
};
"Summary In"의 후 라인은 유효하지 않은 캐스트 예외를 던지는 줄입니다.
(언급 잊어 버린 : VS2008, .NET 3.5SP1, ACTIVERECORD 1.0RC3, NHIBERNATE 1.2 사용)
해결책
- 나는 당신이 의미한다고 생각합니다
count(*)
대신에count(1)
(이것이 당신이 1 색 줄 만받는 이유입니다) - ActivereCordMediator.ExecuteQuery (적어도 RC3에서)는 an을 반환합니다
ArrayList
(일반적인 것은 아닙니다ICollection
) 의object[]
- 캐스팅을 조심하십시오
count
int. 일부 데이터베이스는 다음과 같이 반환합니다long
(예 : SQL Server)
제휴하지 않습니다 StackOverflow