bonjour,
Soit 3 tables : contrats, contrats_vs_factures, factures
Liaisons : contrats et contrats_vs_factures sont a joindre par le champs NumContrat contenus dans les 2 tables,
et contrats_vs_factures et factures sont à joindre via le champs NoFacture contenus dans les 2 tables
Le but que je recherche est de générer un résultat de query linq contenant la table contrats avec, en plus, un champs "dateDerniereFacture". J'ai besoin, évidemment, d'ajouter la date de la dernière facture qui correspond à ce contrat, et s'il n'y a pas de facture liée à ce contrat, y mettre une date par défaut (style "1900-01-01"), mais je n'y arrive pas.
J'ai essayé :
Mais visiblement ça ne passe pas. Il ne sort que les contrats ayant des factures, or je dois tous les sortir.
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 contrats = from contrat in (this.MdiParent as FormPrincipal).dataSetFT.Tbl_Contrats from facturecontrat in (this.MdiParent as FormPrincipal).dataSetFT.Tbl_Factures_vs_Contrats .Where(fc => fc.NumContrat == contrat.NumContrat) from facture in (this.MdiParent as FormPrincipal).dataSetFT.Tbl_Factures .Where(f => f.NoFacture == facturecontrat.NoFacture) .OrderByDescending(f => f.DateFacture).Take(1) select new { contrat.NumContrat, contrat.Archive, contrat.DateDebut, contrat.Titre, contrat.Categorie, DateDerniereFacture = facture != null ? facture.DateFacture : DateTime.ParseExact("1900-01-01", "yyyy-MM-dd", CultureInfo.InvariantCulture) };
Probablement que je fais un join au lieu d'un left join mais je n'arrive pas à le résoudre.
Qu'est ce que je fais mal ? Et évidemment comment devrais-je faire pour corriger la situation ?
Et tant qu'à faire, comment devrais-je faire pour éviter cette table intermédiaire et générer directement la requête qui sortirait tous les contrats avec leur date de dernière facture (et une date prédéfinie en cas de facture inexistante pour le contrat) ?
Merci de vos avis et de vos explications.
Partager