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

VB.NET Discussion :

[LINQ] Paramètre ByRef dans une query LINQ : problème


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [LINQ] Paramètre ByRef dans une query LINQ : problème
    Hello,

    Sur le projet qui m'occupe actuellement, j'ai besoin de faire ceci :
    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
        Public Sub CheckForDuplicateSeason(ByRef detailsOwn As List(Of PROMO_DTO.PromoDetailOwn), Optional ByRef detailsDept As List(Of PROMO_DTO.PromoDetailDepartment) = Nothing)
            If detailsDept Is Nothing Then
                Dim data = (From d1 As PROMO_DTO.PromoDetailOwn In detailsOwn
                            From d2 As PROMO_DTO.PromoDetailOwn In detailsOwn
                            Where d1 IsNot d2 And d1.Seasons.Intersect(d2.Seasons).Count > 0
                            Select d1)
     
                For Each d As PROMO_DTO.PromoDetailOwn In data.ToList
                    d.ErrorText = "saison"
                Next
            Else
                Dim data = (From d1 As PROMO_DTO.PromoDetailOwn In detailsOwn
                            From d2 As PROMO_DTO.PromoDetailDepartment In detailsDept
                            Where d1.Seasons.Intersect(d2.Seasons).Count > 0
                            Select d1)
     
                For Each d As PROMO_DTO.PromoDetailOwn In data.ToList
                    d.ErrorText = "saison"
                Next
            End If
        End Sub
    En l'état, VS me fait la gueule et souligne, dans les deux branches du If, la source de la 2e liste de ma query sous prétexte que c'est un paramètre ByRef. Or la source de la première ligne l'est tout autant (surtout qu'il s'agit de la même liste dans le premier cas).

    En soit, ce n'est pas bien grave, je peux faire comme indiquer dans la MSDN et modifier mon code comme suit :
    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
    23
        Public Sub CheckForDuplicateSeason(ByRef detailsOwn As List(Of PROMO_DTO.PromoDetailOwn), Optional ByRef detailsDept As List(Of PROMO_DTO.PromoDetailDepartment) = Nothing)
            Dim dto As List(Of PROMO_DTO.PromoDetailOwn) = detailsOwn
            If detailsDept Is Nothing Then
                Dim data = (From d1 As PROMO_DTO.PromoDetailOwn In detailsOwn
                            From d2 As PROMO_DTO.PromoDetailOwn In detailsOwn
                            Where d1 IsNot d2 And d1.Seasons.Intersect(d2.Seasons).Count > 0
                            Select d1)
     
                For Each d As PROMO_DTO.PromoDetailOwn In data.ToList
                    d.ErrorText = "saison"
                Next
            Else
                Dim ddp As List(Of PROMO_DTO.PromoDetailDepartment) = detailsDept
                Dim data = (From d1 As PROMO_DTO.PromoDetailOwn In detailsOwn
                            From d2 As PROMO_DTO.PromoDetailDepartment In detailsDept
                            Where d1.Seasons.Intersect(d2.Seasons).Count > 0
                            Select d1)
     
                For Each d As PROMO_DTO.PromoDetailOwn In data.ToList
                    d.ErrorText = "saison"
                Next
            End If
        End Sub
    Mais j'aimerais bien comprendre le pourquoi malgré tout. Il doit sûrement y avoir une très bonne raison derrière tout ça mais avec le peu d'info que j'ai, cette erreur n'a aucune raison d'être...

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Ca maaaaaaarche !
    Bon... Je vois 3 possibilité...


    1. J'ai rien compris et j'ai eu un gros coup de bol
    2. La MSDN raconte des conneries
    3. Y a un sûût dans le framework


    D'après cette page, il m'aurait fallu :
    • Pour le framework 4.5 : créer une classe implémentant IEqualityComparer(Of Season) (Mais où ? Dans le projet qui abrite la classe Season ou dans le projet où je fais la comparaison ?)
    • Pour le framework 4 : que ma classe Season implémente IEquatable(Of Season).


    J'ai tenté la première option, rien à faire... (ou alors, voir option 1 du début).
    J'ai tenté la seconde option et bingo, ça marque du premier coup.

    C'est grave docteur ?

  3. #3
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Question bête ; une utilité concrète avoir mis les paramètres ByRef à la base (parce que c'est surtout ça qui pose problème) ?

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Question bête ; une utilité concrète avoir mis les paramètres ByRef à la base (parce que c'est surtout ça qui pose problème) ?
    Bah pour pouvoir modifier leur contenu et conserver les modifs en sortie de sub.

    Mais ta remarque me fait me demander si le fait que ce soit des classes custom (et donc des types par référence) ne fait pas le taff déjà à la base...

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    en byval ca gardera aussi le contenu modifié
    byref est utile pour les types par valeur pour propager les modifications
    pour les types par référence byref sert à changer la référence

    genre si dans la sub tu dis param2 = new list() avec byref l'appelant aura le new list
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ah bin voilà.

    Malgré tout, pour ma culture général, qu'est-ce qui dérange dans le fait d'avoir un paramètre byref dans une query linq ?

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 09/03/2012, 15h38
  2. Colle sur un tri dans une requête linq to sql
    Par boby62423 dans le forum Linq
    Réponses: 5
    Dernier message: 18/03/2009, 10h01
  3. [2.2.0]Redondance de paramètres dans une Query
    Par lazarel dans le forum BIRT
    Réponses: 3
    Dernier message: 18/07/2007, 11h16
  4. [MySQL] menu select dans une page include problème de paramètres
    Par starr dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/07/2006, 08h42

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