LINQ和分组来自简单的SQL DB关系

时间:2009-10-29 07:30:25

标签: sql linq group-by

我有两个表格,其中包含以下布局和关系:

Tasks:

TaskID    StartTime    EndTime    TaskTypeID    ProductionID
------------------------------------------------------------
1         12:30        14:30      1             1
2         14:30        15:30      2             1
3         11:10        13:40      2             2
4         10:25        15:05      1             2


TaskTypes:

TaskTypeID    Name
---------------------------------------------
1             Hardware Development
2             Software Development

关系是:

TaskTypes.TaskTypeID中的主键和Tasks.TaskTypeID中的外键。

与ProductionID相同(我省略了表格布局): Productions.ProductionID中的主键和Tasks.ProductionID中的外键。

我想要的东西是收到一个分组列表,显示某个产品的每个任务类型的所有任务。我想这很简单,但我无法让它与LINQ一起使用。

该查询用于显示特定产品的所有TaskTypes以及该产品的每个TaskType使用的总时间总和。

我在C#中使用LINQ to SQL自动生成的类。

我试过了:

var = from TaskType in db.TaskTypes
      join Task in db.Tasks on TaskType.TaskTypeID equals Tasks.TaskTypeID
      where Task.ProductionID == p.ProductionID
      group TaskType by TaskType.TaskTypeID;

2 个答案:

答案 0 :(得分:1)

我觉得你想要分组,然后加入:

from task in db.Tasks
where task.ProductionID = p.ProductionID
group task by task.TaskTypeID into grouped
select new { TaskTypeID = grouped.Key,
             TotalTime = grouped.Sum(x => x.EndTime - x.StartTime) } into total
join task in db.Tasks on sum.TaskTypeID equals total.TaskTypeID
select new { TaskType = task.TaskType, TotalTime = total.TotalTime };

我认为至少从根本上是正确的 - 但就EndTime - StartTime部分来说可能会很棘手。

答案 1 :(得分:0)




var result=db.Tasks.GroupBy(p=p.TaksTypeID, (tn, tt)=>
new {
 Key=tn.Name, TakesTime=>tt.Sum(p=>(p.EndTime-p.StartTime))
});