Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用castle活动记录区分选择和分组?_C#_Castle Activerecord - Fatal编程技术网

C# 如何使用castle活动记录区分选择和分组?

C# 如何使用castle活动记录区分选择和分组?,c#,castle-activerecord,C#,Castle Activerecord,如何使用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`; 我尝

如何使用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`;
我尝试了以下方法:

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() };
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() };
它将
System.String抛出到字符串(System.String)NotSupportedException

更新:


第一个LINQ查询中的
g.First()
似乎是导致问题的原因,因为如果我只运行第一个查询,我会得到一个
应该不可访问的代码
-异常,但如果我删除
.First()
它“工作”,但不会返回我需要的内容。

改为使用匿名类型分组:

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() };

我用以下方法解决了这个问题:

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() };
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() };
但这并不是最好的解决方案,因为所有对象都是从数据库中获取的,但至少它目前正在工作,但如果可用,请提供更好的解决方案

编辑:
我现在使用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() };

@chrfin:它说了哪种方法吗?不真实;堆栈跟踪中的最后一行是
NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource)
,但请查看我的问题更新。