如何在c#中使用group by

问题描述 投票:1回答:1
   public JsonResult GetWeekTimeSheetData(DateTime Date)
    {
        try
        { 
            var thisWeekStart = Date.AddDays(-(int)Date.DayOfWeek);
            var thisWeekEnd = thisWeekStart.AddDays(7).AddSeconds(-1);
            List<Object> lstData = new List<object>();
           var Taskss = db.Tasks.Where(x => x.IsActive == true && x.TaskName != null).Select(x => x.TaskName);
            while (thisWeekStart.Date <= thisWeekEnd.Date)
            {
                double hourss = db.TimesheetData.Where(x => x.Date == thisWeekStart && x.Date != null).GroupBy(y => (double?)y.Hours) ?? 0;
                double hours = db.TimesheetData.Where(x => x.Date == thisWeekStart && x.Date != null).Sum(y => (double?)y.Hours) ?? 0;
                lstData.Add(new { DayName = thisWeekStart.ToString("dddd"), Hours = hours, TAskName=q });
                thisWeekStart = thisWeekStart.AddDays(1);
            }
            return Json(lstData);

我的表是:

 TimeSheetDatas(Guid ID,double hours,DateTime Date,Guid TaskID,virtual 
 TimeSheet TimeSheet ).
 TimeSheets(Guid ID,DateTime StartDate,DateTime EndDate,List<TimeSheetData> 
 TimeSheetData).
 Tasks( String TaskName,string TaskDescription)

我想要几小时=这是每个任务的小时总和介于这个周末和本周末之间。我试图写查询但我不知道如何使用groupby函数。要知道我的问题是什么问题

  double hourss = db.TimesheetData.Where(x => x.Date == thisWeekStart && 
  x.Date != null).GroupBy(y => (double?)y.Hours) ?? 0; 

它的错,但我试过这个。我只想要在每周开始和本周末的TimeSheetDatas中完成每项任务的总和。

c# asp.net
1个回答
0
投票

你可以这样试试;

var timesCalculation = db.TimesheetData
    .GroupBy(x => x.Task)
    .Select(grp => new
    {
        Task = grp.Key.Task,
        HourSum = grp.Sum(x => (double?)x.Hour ?? 0)
    });

我假设你在TimesheetData实体中有Task的导航属性。

© www.soinside.com 2019 - 2024. All rights reserved.