3

月ごとにグループ化された合計行数を取得しようとし、QueryOver と戦っています。私が見つけた限られたリソースから、手がかりは Projections.SqlGroupProjection のようですが、正しく取得できません。

これは私がこれまでに持っているものです:

var jobs = _statelessSession.QueryOver<Job>()
                .SelectList(list => list
                                        .Select(Projections.SqlGroupProjection("MONTH(DateCreated) AS Month", "MONTH(DateCreated)",new string[]{"DateCreated"},new[]{NHibernateUtil.Int32}))
                                        .SelectCount(m => m))
                .List<object>();
4

3 に答える 3

6

今後の参考のために、次のようになりました。

            var startDate = DateTime.Now.AddMonths(-6);
            startDate = new DateTime(startDate.Year,startDate.Month,1);
            var jobs = _session.QueryOver<Job>()
                .WhereRestrictionOn(c => c.DateCreated).IsBetween(startDate).And(DateTime.Now)
                .SelectList(list => list
                    .Select(Projections.SqlGroupProjection(
                        "YEAR(DateCreated) As [Year]",
                        "YEAR(DateCreated)",
                        new[] { "YEAR" },
                        new IType[]{NHibernateUtil.Int32}))
                    .Select(Projections.SqlGroupProjection(
                        "MONTH(DateCreated) As [Month]",
                        "MONTH(DateCreated)",
                        new[] { "Month" },
                        new IType[] { NHibernateUtil.Int32 }))
                    .SelectCount(x=>x.Id))
                .OrderBy(Projections.SqlFunction(
                       "YEAR",
                       NHibernateUtil.Int32,
                       Projections.Property<Job>(item=>item.DateCreated))).Desc
                .ThenBy(Projections.SqlFunction(
                       "MONTH",
                       NHibernateUtil.Int32,
                       Projections.Property<Job>(item => item.DateCreated))).Desc
                .List<object>();

生産したもの:

SELECT YEAR(DateCreated)  As [Year],
       MONTH(DateCreated) As [Month],
       count(this_.Id)    as y2_
FROM   Jobs this_
WHERE  this_.DateCreated between '2011-11-01T00:00:00.00' /* @p0 */ and '2012-05-07T14:23:52.00' /* @p1 */
GROUP  BY YEAR(DateCreated),
          MONTH(DateCreated)
ORDER  BY datepart(year, this_.DateCreated) desc,
          datepart(month, this_.DateCreated) desc
于 2012-05-07T12:27:23.340 に答える
4

datepart関数を使用すると、例を確認するためにここを参照してください。ここにいくつかの行を書くだけです:

var result = session.QueryOver<Item>()
                .Where(
                Restrictions.Eq(
                Projections.SqlFunction("month"
                , NHibernateUtil.Int32
                , Projections.Property<Item>(item => item.StartDate)
                ) 
                ,1)).List();

この例では、ItemエンティティをStartDateという名前のプロパティとして想定しています。投稿では 、データの読み取りでも日付部分の射影を使用する方法の例も示されています。

于 2012-05-07T10:53:48.803 に答える
0

私は自分自身を試したのではなく、他の 質問に対する答えをまとめただけです。

session.QueryOver<...>()
   .SelectList(list => list
      .Select(GroupProperty(Projections.SqlProjection(...)))
      .SelectSum(x => x.Price)
   );

+

group post by new { post.Date.Year, post.Date.Month } into grouped

=

.Select(GroupProperty(Projections.SqlProjection(
    new 
    { 
        post.Date.Year, 
        post.Date.Month 
    })))

編集

別の試み:

   .SelectList(list => list
       .SelectGroup(c => c.Date.Year),
       .SelectGroup(c => c.Date.Month),
       .SelectCount(m => m))
于 2012-05-07T10:29:30.527 に答える