2009-10-29 3 views
0

j'ai deux tables avec la mise en page suivante et relations:LINQ et regroupement d'une simple relation SQL DB

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 

La relation est:

clé primaire dans TaskTypes.TaskTypeID et clé étrangère dans les tâches. TaskTypeID.

La même chose avec le ProductionID (j'ai omis la disposition de la table): Clé primaire dans Productions.ProductionID et clé étrangère dans Tâches.ProductionID.

Ce que je voudrais recevoir est recevoir une liste groupée qui affiche toutes les tâches pour chaque type de tâche pour une certaine production. Je suppose que c'est assez simple mais je ne peux pas le faire fonctionner avec LINQ.

La requête est utilisée pour afficher tous les TaskTypes pour une certaine production avec la somme de la durée totale utilisée pour chaque TaskType pour cette production. J'utilise des classes LINQ to SQL générées automatiquement en C#.

J'ai essayé ceci:

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; 

Répondre

1

Il me sent comme vous voulez groupe et puis rejoindre:

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 }; 

Je pense que c'est au moins fondamentalement droit - mais il peut être difficile en termes de la partie EndTime - StartTime.

0



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