LINQ и группировка из простой связи базы данных SQL

Asked
Viewd90

0

У меня есть две таблицы со следующим расположением и связями:

 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.

Запрос используется для отображения всех типов задач для определенного производства, а также суммы общего времени, затраченного на каждый тип задачи для этого производства.

Я использую автоматически сгенерированные классы LINQ to SQL в C #.

Я пробовал это:

 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
 


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