2010-11-23 6 views
1

nhibernate 3.0을 사용하는 linq 쿼리가 있습니다. 그러나 그것은 오류를 계속 반환합니다.LINQ to Nhibernate (3.0) : GroupBy와 하위 쿼리의 합계가 NoTImplemented를 제공합니다.

threw exception: System.NotImplementedException: The method or operation is not implemented.. 

나는 LINQ 2 SQL에서 똑같은 기능을 시도했지만 완벽하게 작동했습니다.

몸에는 어떤 생각이 있겠지요 ... 여기 내 선택의 일부이며 Groupby와 SUm이있는 하위 쿼리입니다.

Amount = (System.Double) 
    ((from m0 in _session.Query<Statement>() 
    where m0.Code== c.Code 
    group m0 by new 
    { 
     m0.Code 
    } 
    into g 
    select new 
    { 
    Expr1 = (System.Double)g.Sum(p => p.Amount) 
    }).First().Expr1) 
    }; 

어떤 아이디어 .. 내가 NHibernate에의 설치 최신 CSR1을 가지고 있지만 단지 내 쿼리 작동하지 않는 것?

미리 감사드립니다.

답변

3

NH3의 LINQ 제공 업체는 현재 베타 상태입니다. 아직 지원되지 않는 특정 구문이 있습니다. (팀은 NH3 출시 이후에이를 처리 할 계획입니다.) 쿼리에서 문제를 일으키는 부분은 group by 절에 "new {}"익명 유형이 있고 group by 절에 First()가 있습니다. 둘 다 현재 구현되지 않습니다. 다음 쿼리는 올바르게 실행되고 동일한 결과를 제공해야합니다.

var query = from m0 in session.Query<Statement>() 
      where m0.Code == c.Code 
      group m0 by m0.Code into g 
      select new {Expr1 = g.Sum(p => p.Amount)}; 
var result = query.ToList().First().Expr1; 

먼저 group by 절의 "new {}"는 필요하지 않습니다. 다른 변경 사항은 "ToList()"를 추가하는 것입니다. 이렇게하면 데이터베이스에서 결과를 쿼리 한 다음 LINQ-to-Objects를 사용하여 First() 결과를 가져옵니다.

select cast(sum(statement0_.Amount) as DOUBLE PRECISION) as col_0_0_ 
from  Statement statement0_ 
where (statement0_.Code is null) 
     and ('FOO' /* @p0 */ is null) 
      or statement0_.Code = 'FOO' /* @p0 */ 
group by statement0_.Code 
+0

감사합니다 제임스,하지만 난 컴파일 오류가 ... "변환 할 수 없습니다 소스 유형 System.Linq.IQueryable 을 두 번 유형을 대상으로"이 쿼리에 대해 생성 된 SQL은 여기 내 코드입니다 - Amount는 다른 쿼리의 일부이고 금액은 DOUBLE (하위 쿼리)입니다. Amount = (this._session.Query의 m0에서 가져온 것입니다.) 여기서 m0.ClientCode == c.ClientCode 그룹 m0 by m0.ClientCode into g 새로운 {Expr1 = g.Sum (p => p.Amount)}}}를 선택하십시오; – Martin

+0

나는 거의 내가 거기에 있다고 생각하는 어떤 의견이라도 고맙게 생각할 것이다 :-) – Martin

+0

별로 관심 없다. 위의 쿼리는 실제로 더 큰 쿼리의 일부인 하위 쿼리입니까? 그렇다면 전체 쿼리를 표시하여 컨텍스트를 가질 수 있습니까? (주저하지 말고 새로운 코드로 질문을 업데이트하십시오. 주석의 중요한 길이의 코드는 읽기가 어렵습니다.) –

관련 문제