2010-11-23 39 views
1

我有一個使用nhibernate 3.0的linq查詢。但它不斷返回一個錯誤。LINQ to Nhibernate(3.0):GroupBy和Sum在子查詢中給出未實現

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到對象來獲得First()結果。爲此查詢生成的SQL是:

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 <表達式1:雙重>目標類型雙」這裏是我的代碼 - 記住Amount是另一個查詢的一部分..並且amount是一個DOUBLE(subquery)Amount =(從this._session.Query中的m0開始()m0.ClientCode == c.ClientCode group m0 by m0.ClientCode into g選擇新的{Expr1 = g.Sum(p => p.Amount)})}; – Martin 2010-11-24 15:43:23