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 :

Est-il possible de créer une requête LINQ capable de renvoyer un objet contenant une List d'objets?


Sujet :

Linq

  1. #1
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut Est-il possible de créer une requête LINQ capable de renvoyer un objet contenant une List d'objets?
    Salut,

    Pas très clair j'avoue. Je m'explique:
    J'ai un objet métier A contenant un liste d'objets B
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class A
    {
          public string Chaine1 { get; set; }
          public List<B> MaListeDeB { get; set; }
    }
    Est-il possible d'avoir:
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var query = from a into db.MaTableA
                      join b into db.MaTableB on a.Id = b.Id
                      where a.Id == 123
                      select new A { Chaine1 = a.Champ1, MaListeDeB = ????????? }
    On peut imaginer que:
    • MaTableA est une table de clients
    • MaTableB est la liste de commandes associées aux clients

    Merci d'avance.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Ca marche en faisant une requête comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var query = from a into db.MaTableA
    			join b into db.MaTableB on a.Id = b.Id into C
    			where a.Id == 123
    			select new A { Chaine1 = a.Champ1, MaListeDeB = MaMethode(C) }
    "C" contient un IEnumerable<B>. Une boucle "for" et le tour est joué. Il faut néanmoins garder un oeil sur les perfs.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    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
    euh, t'es sûr que ça marche ? elle me semble bizarre ta syntaxe LINQ

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par tomlev Voir le message
    euh, t'es sûr que ça marche ? elle me semble bizarre ta syntaxe LINQ
    Où ça bizarre? J'avoue, je l'ai fait de tête comme je suis pas un crack LINQ j'ai fait quelques erreur de syntaxe "into" au lieu de "in"
    La voilà en vrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var query = from v in db.vc_Videos
                join l in db.vc_Video_Locations on v.VideoId equals l.VideoId into locs
                where v.VideoId == id
                select new VideoEntity { Id = v.VideoId, Name = v.VideoName, Locations = LoadLocations(locs) };
     
    return query.FirstOrDefault();
    Avec "LoadLocations(locs)"
    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
    24
    25
    26
    private List<LocationEntity> LoadLocations(IEnumerable<vc_Video_Location> locs)
    {
        List<LocationEntity> list = new List<LocationEntity>();
     
        foreach (var item in locs)
        {
            LocationEntity l = new LocationEntity()
            {
                Id = item.LocationId,
                DropDate = item.DropDate,
                PickDate = item.PickDate,
                Latitude = item.Latitude,
                Longitude = item.Longitude
            };
            list.Add(l);
        }
     
        list.Sort(CompareLocations);
     
        return list;
    }
     
    private static int CompareLocations(LocationEntity a, LocationEntity b)
    {
        return a.DropDate.CompareTo(b.DropDate);
    }
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/04/2009, 16h29
  2. Réponses: 2
    Dernier message: 07/10/2008, 13h17
  3. Réponses: 2
    Dernier message: 29/05/2008, 15h59
  4. Réponses: 7
    Dernier message: 30/05/2007, 16h17
  5. est il possible de créer dynamiquement une class ???
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 12/07/2005, 16h22

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