2013-11-04 38 views
2

我有下面的LINQ查询,我想基础上WorkItem.Id小时总结:GROUPBY,多和Linq中的拉姆达加入

EntryCategories 
      .Join(TimeReportEntries, 
       ec => ec.Id, 
       tr => tr.WorkItem.Id, 
       (ec, tr) => new { ec, tr }) 
          .Join(Timesheets, 
            ecs => ecs.tr.Timesheet.Id, 
            t => t.Id, 
            (ecs, t) => new { ecs, t }) 
               .Join(Users, 
                ts => ts.t.User.Id, 
                u => u.Id, 
                (ts, u) => new 
                 { 
                  Employee = ts.t.User.FirstName + " " + ts.t.User.LastName, 
                  Hours = ts.ecs.tr.Hours 
                 }); 
+1

@Yosi - 好像他们希望得到Hours'的'的总和,并从上面的查询用'WorkItem.Id'组,通过扩展,或有新的对象来保存它 –

+1

好吧,祝你好运:),但问题是什么? –

+0

@Yosi - 如何 - 我假设:),不确定我自己,现在试图找出结果集中的实际情况已经太晚了。 OP,你能向我们展示来自该查询的当前结果集吗? –

回答

0

我没有想法,你想究竟如何它在这里工作并且不能编译它,但我认为你需要通过每个工作项目来获得小时数,这就是你所追求的。

EntryCategories 
     .Join(TimeReportEntries, ec => ec.Id, tr => tr.WorkItem.Id, (ec, tr) => new { ec, tr }) 
     .Join(Timesheets, ecs => ecs.tr.Timesheet.Id, t => t.Id, (ecs, t) => new { ecs, t }) 
     .Join(Users, ts => ts.t.User.Id, u => u.Id, (ts, u) => new 
     { 
      WorkItemId = ts.ecs.tr.WorkItem.Id 
      Employee = ts.t.User.FirstName + " " + ts.t.User.LastName, 
      Hours = ts.ecs.tr.Hours 
     }) 
     .GroupBy(x => x.WorkItemId) 
     .Select(x => new 
     { 
      WorkItemId = x.Key, 
      Hours = x.Sum(y => y.Hours) 
     });