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 :

Take et copie resultat Linq


Sujet :

Linq

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut Take et copie resultat Linq
    J'essai de faire une chose qui me semble simple :

    Au lieu de faire 1 if et de faire 2 fois le même linq en ajoutant juste un take, du fait que l'ensemble des fichiers soit énuméré, j'essaie de le faire ensuite.

    Avant simplification
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    If MaxMedia<>0 then
     
    Dim f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
                        Where exts.Contains(fichier.Extension.ToLower)
                        Order By fichier.FullName Ascending.take(MaxMedia)
    Else
    Dim f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
                        Where exts.Contains(fichier.Extension.ToLower)
                        Order By fichier.FullName Ascending
    End if
    Puis 2ème traitement pour création des objets ...

    J'essai ça :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
                        Where exts.Contains(fichier.Extension.ToLower)
                        Order By fichier.FullName Ascending
     
     If MaxMedia <> 0 Then
                    f = f.Take(MaxMedia)
                End If

    Mais j'obtiens un invalidCastException du fait que mon f est à l'origine un IOrderedEnumerable

    existe-il un moyen "simple" ou dois-je avoir une nouvelle variable qui reprend le résultat du Take et une autre qui copie f ?
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Dans la première version de ton code les deux objets déclarés "f" sont de type différent. Le premier déterminé par Take() est un IEnumerable ; le second est un IOrderedEnumerable, qui étend IEnumerable. Mais comme le type est déterminé implicitement par les appels ça ne se voit pas. Dans le second code, f est un IOrderedEnumerable. dans un if tu tente de lui affecter le résultat du Take, c'est-à-dire un IEnumerable, d'où une erreur de cast.
    Pour résoudre ton problème il te faut soit déclarer explicitement un IEnumerable, soit si tu as un retour de fonction juste après renvoyer le résultat avec ou sans l'appel à Take (je ne suis pas entièrement sûr de la syntaxe VB par contre, développant moi-même en C#) :

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim f AS IEnumerable
    f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
        Where exts.Contains(fichier.Extension.ToLower)
        Order By fichier.FullName Ascending
     
    If MaxMedia <> 0 
    Then
      f = f.Take(MaxMedia)
    End If

Discussions similaires

  1. [Toutes versions] MACRO + COPIE DES RESULTAT D UNE RECHERCHE DANS UN NOUVEL ONGLET
    Par reims87 dans le forum Excel
    Réponses: 1
    Dernier message: 27/02/2016, 14h42
  2. impossible d'afficher le resultat d'une requete "Linq to" dans un datagrid
    Par zouuc dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 19/10/2010, 15h44
  3. Réponses: 2
    Dernier message: 30/03/2009, 21h40
  4. Réponses: 2
    Dernier message: 03/05/2006, 14h41
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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