我有两个表格,其中包含以下布局和关系:
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;
答案 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))
});