Salut à toutes et à tous,
Je dois avoir une erreur que je ne trouve pas dans mon LINQ, c'est pourquoi je me permet de faire appel à vous.
Soit une table Contrats et une table temps.
Le but est de sortir la somme du champs "Cout" de la table temps et dont le champs "Date" se situe entre 2 limites (paramètres) et dont le champs "NumContrat" vaut une valeur définie (paramètre).
Pas de problème s'il y a des champs dans la table contrat ET dans la table champs, mais si il y a un contrat qui n'a pas de temps entre les dates définie, il ne sort pas du tout, ce qui est logique.
Il faudrait toutefois que le contrat sorte avec un count = 0.
J'ai dont fais un "LEFT JOIN" comme ci-dessous, mais s'il n'y a pas ligne de la table "temps" qui remplisse les conditions de date, rien ne sort. Je me dis donc que j'ai dû me tromper quelque part mais je n'arrive pas à trouver où.
Si vous trouvez mon erreur, merci de m'expliquer quelle est cette erreur et comment la résoudre.
Dans mon where je veux prendre si on a le contrat.NumContrat et que le subtemp est null (donc si c'est le bon contrat et qu'il n'y a pas de temps), ou si on a le contrat.NumContrat et que subtemp.Date est entre les limites. Toutefois, si le subtemp est null, il ne sort aucune ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 var temps = (this.MdiParent as FormPrincipal).dataSetFT.Tbl_Temps.AsEnumerable(); var contrats = (this.MdiParent as FormPrincipal).dataSetFT.Tbl_Contrats.AsEnumerable(); var query = from contrat in contrats join temp in temps on contrat.NumContrat equals temp.NumContrat into grouped from subtemp in grouped.DefaultIfEmpty() where (subtemp == null && contrat.NumContrat == dgvr.Cells["numContrat"].Value.ToString()) || (contrat.NumContrat == dgvr.Cells["numContrat"].Value.ToString() && subtemp.Date >= debutDateTimePicker.Value.Date && subtemp.Date <= finDateTimePicker.Value.Date) group subtemp by new { NumContrat = contrat.NumContrat, Titre = contrat.Titre } into g select new { numContrat = g.Key.NumContrat, Titre = g.Key.Titre, CoutTotal = g.Sum(subtemp => (subtemp == null ? 0 : subtemp.Cout)) };
Merci de vos z'avis z'avisés.
Partager