IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

ne prend pas en charge la traduction en SQL


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut ne prend pas en charge la traduction en SQL
    Bonjour,
    J'ai cherché plusieurs jours sans trouver de reponses à mon problème :

    Au niveau de la premirere expression lambda WHERE, j'ai l'erreur suivante :
    ne prend pas en charge la traduction en SQL
    Je cherche en fait à faire une recherche multi critere sur la table INCIDENT, mais je veux faire des jointures pour recuperer les noms des colonnes des autres tables.
    J'ai donc crée une class que j'ai appelé CustomSearch dans laquelle je mets les champs/tables utilisées.


    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
    16
    17
    18
    19
    20
    21
    22
    public List<CustomSearch> Search(INCIDENT myincident, STATUT_INCID mystatutincid, STATUT_INCID mystatutincid)
     {
     
      var IncidentQuery = from i in MyDAODataContext.INCIDENT
     
        join p in MyDAODataContext.PRIOTITE on i.PRIORITE_ID_PRIO equals p.ID_PRIO
        select new CustomSearch(myincident) { ID = i.APPLICATION_ID_APPLI, IDP = p.ID_PRIO, LIBprobleme = p.LIB_PRIO, nom_appli = i.NIV_SERVICE_ID_NIVSERV };
     
      IncidentQuery = GetIncidentQuery(IncidentQuery, myincident, mystatutincid);
      return IncidentQuery.ToList();
     
     }
     
    public IQueryable<CustomSearch> GetIncidentQuery(IQueryable<CustomSearch> IncidentQuery, INCIDENT myincident, STATUT_INCID mystatutincid)
     {
      if (myincident.NUM_TICKET!=null)
      IncidentQuery = IncidentQuery.Where(iq => iq.incident.NUM_TICKET == myincident.NUM_TICKET);
      if (!string.IsNullOrEmpty(mystatutincid.LIB_STATINCID))
      IncidentQuery = IncidentQuery.Where(iq => iq.incident.STATUT_INCID.LIB_STATINCID == mystatutincid.LIB_STATINCID);
     
      return IncidentQuery;
     }

    Et le code de ma class CustomSearch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class CustomSearch
     {
     DAODataContext db;
     
     public INCIDENT incident;
     public STATUT_INCID statut { get; set; }
     
     public CustomSearch(INCIDENT pincident)
     {
      incident = pincident;
     }
     }

    Merci d'avance de votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est le "new CustomSearch(myincident)" qui ne passe pas: la BDD ne peut pas créer une instance de ta classe CustomSearch, ce n'est pas traduisible en SQL...

    Il faut introduire un "AsEnumerable" avant cette projection, de façon à ce que ce code s'exécute en local et non sur la BDD. Tu peux faire quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      var query = from i in MyDAODataContext.INCIDENT
        join p in MyDAODataContext.PRIOTITE on i.PRIORITE_ID_PRIO equals p.ID_PRIO
        select new { ID = i.APPLICATION_ID_APPLI, IDP = p.ID_PRIO, LIBprobleme = p.LIB_PRIO, nom_appli = i.NIV_SERVICE_ID_NIVSERV };
     
      var IncidentQuery =
            from i in query.AsEnumerable()
            select new CustomSearch(myincident) { ID = i.ID, IDP = i.IDP, LIBprobleme = i.LIBprobleme, nom_appli = i.nom_appli };

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut
    Merci de ta réponse,

    J'ai essayé ta solution, le problème est plus que résolu, j'ai juste du changé le type de la methode GetIncidentQuery a IEnumerable

    Merci Encore,

    Jeff

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2011, 20h04
  2. Réponses: 8
    Dernier message: 10/11/2010, 13h31
  3. Réponses: 10
    Dernier message: 15/10/2008, 16h47
  4. Réponses: 8
    Dernier message: 20/06/2006, 16h54
  5. Réponses: 27
    Dernier message: 19/10/2005, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo