2011-06-30 8 views
0

LINQまたはHQLを使用して次のSQLクエリを実行するにはどうすればよいですか?キャッスルのアクティブなレコードを使用して個別に選択してグループ化する方法は?

SELECT `year`, `month`, COUNT(code_id) 
    FROM (SELECT DISTINCT request_codes_id AS code_id, 
    YEAR(requested) AS `year`, MONTH(requested) AS `month` FROM requests) r 
    GROUP BY `year`, `month` 
    ORDER BY `year`, `month`; 

私は次のことを試してみました:System.String ToString(System.String) NotSupportedExceptionを投げた

var items = from r in TestaccountRequest.Queryable 
      group r by r.RequestCodeId into g 
      select g.First(); 
var grouped = from r in items 
       group r by r.Requested.ToString("yyyyMM") into y 
       select new { Year = y.First().Requested.Year, Month = y.First().Requested.Month, Count = y.Count() }; 

UPDATE:

最初のLINQ-クエリでg.First()は、私が最初のものだけを実行する場合、私はCode supposed to be unreachable -Exceptionを得るために、問題を引き起こしているようだが、私は.First()それ「作品を削除する場合"しかし、私は必要なものを返すことはありません。

答えて

0

私はちょっと、以下を使用してそれを解く:

var items = from r in TestaccountRequest.Queryable 
      group r by r.RequestCodeId into g 
      select g.ElementAt(0); 
var grouped = from r in items.ToList() 
       group r by new { Year = r.Requested.Year, 
           Month = r.Requested.Month } into g 
       select new { g.Key.Year, g.Key.Month, Count = g.Count() }; 

が、すべてのオブジェクトは、DBから取り出されてきているように私はthatsのない最適なソリューションをguesしかし、少なくとも今のところ働いていますが、利用可能であれば、より良い解決策を提供してください。

EDIT:
私は今、HQLを使用して、それを解く:それは言いました*どの*:

HqlBasedQuery query = new HqlBasedQuery(typeof(ActivationCodeTestaccountRequestRecord), 
      "SELECT DISTINCT r.ActivationCodeId, YEAR(r.Requested), MONTH(r.Requested) " + 
      "FROM ActivationCodeTestaccountRequestRecord r"); 
var items = from object[] row in (ArrayList)ActiveRecordMediator.ExecuteQuery(query) 
      group row by new { Year = row[1], Month =row[2] } into g2 
      select new { Year = g2.Key.Year, Month = g2.Key.Month, Count = g2.Count() }; 
1

グループの代わりに匿名型によって:

var grouped = from r in items 
       group r by new { Year = r.Requested.Year, 
           Month = r.Requested.Month } into g 
       select new { g.Key.Year, g.Key.Month, Count = g.Count() }; 
+0

は、これは '指定されたメソッドがsupported.'-例外を... – ChrFin

+0

@chrfinではない私を得ました方法? –

+0

本当にありません。スタックトレースの最後の行は 'NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource)'ですが、私の質問の更新を見てください。 – ChrFin

関連する問題