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é :
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)
                            };
Mais visiblement ça ne passe pas. Il ne sort que les contrats ayant des factures, or je dois tous les sortir.
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.