【问题标题】:Trouble with linq query syntax group by expressionlinq 查询语法按表达式分组的问题
【发布时间】:2019-08-09 07:40:13
【问题描述】:

我正在创建一个时间表应用程序,我想显示以下内容:

为每个员工分成一个格子:

Id、Name、TaskName、SunHours、MondayHours... 等等 FridayHours

Employee_Table
empid
name

Timesheet
id
empid
taskid
sat
sun
mon
tues
wed
thurs
fri
sat

Task
taskid
taskname

我正在努力从 linq 查询创建对象,因为我无法访问时间表特定数据,即 sun、mon、tue 值。这是我所做的:

   var result = (from e in db.Employees
                          join t in db.TimeSheets on e.Id equals t.EmployeeId
                          group e by t.TaskId into g
                          orderby g.Key
                          select new
                          {
                              empid = g.Key,
                              name = g.Select(e => e.Name),
                              sat = g.Select(s => s.Saturday), // cannot access this info
                              sun = g.Select(s => s.Sunday),
                              mon = g.Select(s => s.Monday),
                              tue = g.Select(s => s.Tuesday),
                              wed = g.Select(s => s.Wednesday),
                              thurs = g.Select(s => s.Thursday),
                              fri = g.Select(s => s.Friday),
                          });

更新:

所以,我最终得到了这个 - 它似乎代表了我所追求的。

var res = (from e in db.Employees
               join t in db.TimeSheets on e.Id equals t.EmployeeId

               group t by new { t.EmployeeId } into g
               select new
               {
                   id = g.Key.EmployeeId,
                   data = g
                   });

【问题讨论】:

  • 这类问题被问得比较频繁。寻找 LINQ + pivot。

标签: c# linq


【解决方案1】:

基于此answer,按“e”分组只会使“t”对象超出范围。

您可以在对 Timesheet 对象进行分组后加入员工表。看起来您可能还需要 .Sum(s => s.mon) 而不是 .Select(s => s.mon)

编辑:.Sum() 不是 .Max()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多