문제

집계 결과와 추가 열을 반환하는 간단한 집계 쿼리를 수행하려고합니다. 이 게시물 -> 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 사용)

도움이 되었습니까?

해결책

  1. 나는 당신이 의미한다고 생각합니다 count(*) 대신에 count(1) (이것이 당신이 1 색 줄 만받는 이유입니다)
  2. ActivereCordMediator.ExecuteQuery (적어도 RC3에서)는 an을 반환합니다 ArrayList (일반적인 것은 아닙니다 ICollection) 의 object[]
  3. 캐스팅을 조심하십시오 count int. 일부 데이터베이스는 다음과 같이 반환합니다 long (예 : SQL Server)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top