none
where not Exists RRS feed

  • Question

  • je galère sur une requete qui est simplicime en SQL mais pas moyen de la faire fonctionner avec Linq.

    j'ai beau chercher sur les forum droite à gauche mais je finis toujours avec un message d'erreur.

    ma requete :

    var listecentre = (from centre in ctx.CENTRESURSSAF where !(from cotisation in ctx.CENTRESCOTISATIONS select cotisation.CODURSSAF).Contains(centre.CODURSSAF)select centre);   foreach(var item in listecentre){ centrecotisation.Add(item.NOM); }

    le message d'erreur sur le Foreach :

    "LINQ to Entities ne reconnaît pas la méthode «*Boolean Contains[String](System.Linq.IQueryable`1[System.String], System.String)*», et cette dernière ne peut pas être traduite en expression de magasin."

    pour résumer, je cherche les CODURSSAF de la table CENTRESURSSAF qui ne sont pas dans la table CENTRESCOTISATIONS. Bien entendu, CODURSSAF est à la fois dans CENTRESCOTISATIONS et dans CENTRESURSSAF

    Mon appli est en EF3.5 (pré requis oblige) et en cherchant un peu partout, j'ai cru comprendre que la commande .Contains() n'était pas supporté mais que faire alors??

    j'avoue être un peu frustré de réussir a faire des requêtre complexes et ne pas réussir a faire cette requête toute simple!

    merci d'avance pour vos lumières!


    Lallemand Sébastien

    jeudi 14 mars 2013 14:57

Réponses

  • Bonjour,

    Utilisez l'opérateur Any() :

    var listcentre = ctx.CENTRESURSSAF.Where(centre => ctx.CENTRESCOTISATIONS.Any(cot => cot.CODURSSAF == centre.CODURSSAF) == false);

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    vendredi 15 mars 2013 06:46
    Modérateur

Toutes les réponses

  • Bonjour,

    Utilisez l'opérateur Any() :

    var listcentre = ctx.CENTRESURSSAF.Where(centre => ctx.CENTRESCOTISATIONS.Any(cot => cot.CODURSSAF == centre.CODURSSAF) == false);

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    vendredi 15 mars 2013 06:46
    Modérateur
  • bonjour,

    super! merci pour la requête. je confirme que cela fonctionne. Reste a vérifier les résultats avec mes autres requêtes.

    maintenant je vais decortiquer cette requete pour la comprendre et ne pas me contenter de la laisser fonctionner.

    un grand merci et bonne journée.

    Cordialement


    Lallemand Sébastien

    vendredi 15 mars 2013 07:36