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

C# Discussion :

LINQ to SQL et LINQ to Object


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Points : 40
    Points
    40
    Par défaut LINQ to SQL et LINQ to Object
    Bonjour à tous,

    j'ai une problèmatique en utilisant LINQ.

    J'ai une liste de fichiers qui se trouve dans une table SQL, et normalement cette même liste de fichier se trouve aussi dans un dossier.
    Cependant pour m'en assurer (et accessoirement envoyer un report) je cherche à faire une jointure entre les deux en utilisant LINQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                BAMF103DataContext db = new BAMF103DataContext();
                DirectoryInfo dtFolder = new DirectoryInfo(@"E:\File_F103");
                IEnumerable<String> e = from f in db.bam_F103_AllInstances
                                        join Dossier in dtFolder.GetFiles() on f.DATA_FileName equals Dossier.Name
                        where !f.DT_Sent.HasValue
                        select f.DATA_FileName;
     
                foreach (String i in e)
                    Console.WriteLine(i);
    cependant cela me retourne une erreur de type System.NotSupportedException

    Je tiens absolument à utiliser LINQ (pour ma culture perso surtout) sauf si bien sur vous me dites que ce n'est techniquement pas possible

    je vous remercie d'avance

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Le problème est lié au fait que db.bam_F103_AllInstances est un IQueryable (ça correspond à une table de ta base de données), alors que dtFolder.GetFiles() renvoie seulement un IEnumerable.

    Quand tu exécutes une requête Linq sur un IQueryable, la requête est traitée par le QueryProvider de ce IQueryable ; dans le cas de Linq to SQL, ce traitement consiste à transformer la requête Linq en requête SQL et à l'exécuter sur la BDD. Mais là, tu essaies de faire une jointure avec une collection : il n'est donc pas possible de convertir cette requête en SQL, d'où l'erreur.

    La solution est de "forcer" Linq à traiter db.bam_F103_AllInstances comme un IEnumerable, à l'aide de la méthode AsEnumerable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                IEnumerable<String> e = from f in db.bam_F103_AllInstances.AsEnumerable()
                                        join Dossier in dtFolder.GetFiles() on f.DATA_FileName equals Dossier.Name
                        where !f.DT_Sent.HasValue
                        select f.DATA_FileName;

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

Discussions similaires

  1. [Débutant] Syntaxe sql en Linq to SQL
    Par vaio25 dans le forum C#
    Réponses: 3
    Dernier message: 27/05/2012, 19h09
  2. Linq to SQL ou Linq to Entity
    Par anthride dans le forum Linq
    Réponses: 5
    Dernier message: 21/12/2010, 11h02
  3. [Linq 2 SQL] Problème de modélisation
    Par tomlev dans le forum Accès aux données
    Réponses: 5
    Dernier message: 12/02/2008, 23h29
  4. [Linq to sql] db.add() ?
    Par telynette dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/02/2008, 19h54
  5. [Linq to SQL] Refresh du dbml
    Par zeavan dans le forum Visual Studio
    Réponses: 5
    Dernier message: 02/01/2008, 10h15

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