none
Requête Linq en VB et jointure RRS feed

  • Question

  • Bonjour, 

    J'aurai besoin d'un coup de main svp.

    J'ai une requête sur une table projet qui me retournait 721 éléments Et ces éléments sont ensuite extrait dans un fichier Excel pour les utilisateurs grâce à un clic bouton sur mon application.

    Les utilisateurs voudraient ajouter une colonne à la table retournée, c'est la colonne FactureDate de la table facture.

    Jusque là pas compliqué, sauf que dans la table factureProjet je peux avoir 4 lignes pour le même IDprojet donc la requête que j'ai trouvé me retourne trop de lignes (1600 et quelques). Ou alors si je trie dans facture projet pour enlevé les 3 lignes en trop (par ex cashback != 1 et type != "type1") cela me retourne du coup que les projets qui sont en état facturé car présents dans la table factureprojet (484 lignes). Alors que j'ai besoin de tous les types de projets...

    Voici mon code:

         Dim requete = From proj In db.PROJETS
                          From facProj In db.[FactureProjet].Where(Function(fp) fp.ProjetID = proj.IDPROJET).DefaultIfEmpty()
                          From fac In db.[Facture].Where(Function(f) f.FactureID = facProj.FactureID).Where(Function(f) f.CashBack <> True).Where(Function(p) p.FactureType = "Type1").DefaultIfEmpty()
                          Select New ProjetsFacture With {.projet = proj, .facture = fac}


    Auriez-vous une idée???

    Merci!!!

    • Modifié marliche jeudi 22 janvier 2015 13:56
    jeudi 22 janvier 2015 13:54

Toutes les réponses

  • Bon j'ai trouvé ma requête en SQL maintenant il faut que j'arrive à la traduire en linq ;)

    SELECT [PROJETS].*, [Facture].FactureDate
      FROM [CEE].[dbo].[PROJETS] 
      LEFT JOIN [CEE].[dbo].[FactureProjet] ON [FactureProjet].[PROJETID] = [PROJETS].[IDPROJET]
      INNER JOIN [CEE].[dbo].[Facture] ON [Facture].[FactureID] = [FactureProjet].[FactureID] AND [FactureType]='type1' AND [CashBack]=0 
      UNION
      SELECT *, null
      FROM [CEE].[dbo].[PROJETS]
      WHERE IDPROJET NOT IN (select ProjetID FROM [CEE].[dbo].[FactureProjet])

    jeudi 22 janvier 2015 15:42
  • Bonjour,

    NOONNNNNN, pourquoi retourner à Linq alors que vous avez trouvé la solution ?!!!

    Utilisez votre procédure stockée, c'est définitivement la bonne approche (et vous pouvez le faire avec Entity Framework).


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 23 janvier 2015 06:37
  • Je plussoie à l'infini :)

    C'est typiquement le cas où on fait une procédure stockée ou une vue : c'est le boulot du serveur de données de gérer des requêtes complexes !!

    Cordialement,


    Yan Grenier

    vendredi 23 janvier 2015 07:32
  • En plus, ça évite les conversations du genre :

    • "Mais votre appli là, elle rame à donf ?!!"
    • "Ben oui mais c'est pas de notre faute, c'est Entity Framework qui n'optimise pas ses requêtes"



    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 23 janvier 2015 08:10
  • C'est pas faux!!! Pourquoi faire compliqué quand on peut faire simple!!!

    Merci en tout cas! :-)))

    vendredi 23 janvier 2015 08:40