2010-11-23 9 views
1

私はnhibernate 3.0を使用してlinqクエリを持っています。しかし、それはエラーを返し続けます。LINQ to Nhibernate(3.0):サブクエリのGroupByとSumは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 {}"匿名型であり、by 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句の「新しい{}」が必要とされないことを。もう1つの変更は "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 <ます。Expr1:ダブル> double型をターゲットに、」このクエリのために生成されたSQLは、ここに私のコードです - 金額は別のクエリの一部であり、金額は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

かなりあなたに従っていない。上のクエリは実際には大きなクエリの一部であるサブクエリですか?もしそうなら、私たちはいくつかのコンテキストを持っているので、全体のクエリを表示できますか? (新しいコードで質問を更新することを躊躇しないでください。コメント内の長さのコードは読みにくいです) –

関連する問題