1

次の(間違った)LINQ関数(更新)があります:

public IQueryable<ClassUsageReport> GetClassUsage()
    {
        //Class Code, Title, Usage, FiscalYear
        var queryable = (from agencyplan in _agencyPlansList
                         join classSchedule2012 in _classSchedule2012List
                            on agencyplan.Id equals classSchedule2012.AgencyPlanId
                         join classes in _classesList
                            on classSchedule2012.Class.Id equals classes.Id
                         orderby agencyplan.PlanYear.FiscalYear descending, classes.ClassCode.Count() descending
                         group agencyplan by new
                         {
                             agencyplan.PlanYear.FiscalYear,
                             classes.ClassCode,
                             classes.Title 
                         } into gcs
                         select new ClassUsageReport
                         {
                             ClassCode = gcs.Key.ClassCode,
                             Title = gcs.Key.Title,
                             Usage = gcs.Key.ClassCode.Count(),
                             FiscalYear = gcs.Key.FiscalYear 
                         }
                        );

        return queryable.AsQueryable();
    }

Group By 句と Order By 句に問題があります。また、COUNT() を使用します。

必要に応じて(そして期待どおりに)結果を生成する正しいSQLステートメントを作成しました。

select py.fiscalyear, c.classcode, c.title, count(c.classcode) as usage from classschedule2012 cs
inner join classes c on cs.class_id = c.id
inner join agencyplans ap on cs.agencyplanid = ap.Id 
inner join planyears py on ap.planyear_id = py.id
group by py.fiscalyear, c.classcode, c.title
order by py.fiscalyear desc, usage desc

LINQ ステートメントのグループ化と順序付けで何が間違っていますか? 私のSQLのように「使用法」を含めたいと思います。実際のカウントを正しく反映するにはどうすればカウントを取得できますか? クエリは現時点では、すべての行で「9」のみを返します。実際の結果は「55、44、14、13」などになるはずなので、これは私のSQLと一致しません....

編集:2013年11月14日

最終結果は次のとおりです。

   public IQueryable<ClassUsageReport> GetClassUsage()
   {
        //Class Code, Title, Usage, FiscalYear
        var queryable = (from agencyplan in _agencyPlansList
                         join classSchedule2012 in _classSchedule2012List
                            on agencyplan.Id equals classSchedule2012.AgencyPlanId
                         join classes in _classesList
                            on classSchedule2012.Class.Id equals classes.Id
                         where classes.Active = true
                         orderby agencyplan.PlanYear.FiscalYear descending
                         group agencyplan by new
                         {
                             agencyplan.PlanYear.FiscalYear,
                             classes.ClassCode,
                             classes.Title
                         } into gcs
                         select new ClassUsageReport
                         {
                             ClassCode = gcs.Key.ClassCode,
                             Title = gcs.Key.Title,
                             Usage = gcs.Count(),
                             FiscalYear = gcs.Key.FiscalYear
                         }
                        );

        return queryable.AsQueryable().OrderByDescending(x => x.FiscalYear).ThenByDescending(x => x.Usage);
    }
4

2 に答える 2