10 votes

Question simple sur Linq : Comment sélectionner plus d'une colonne ?

Mon code est :

            List<Benutzer> users = (from a in dc.Benutzer
                                    select a).ToList();

J'ai besoin de ce code mais je ne veux sélectionner que 3 des 20 colonnes de la table "Benutzer". Quelle est la syntaxe pour cela ?

25voto

Jon Skeet Points 692016

Voici une expression de requête :

var users = (from a in dc.Benutzer
             select new { a.Name, a.Age, a.Occupation }).ToList();

Ou en notation par points :

var users = dc.Benutzer.Select(a => new { a.Name, a.Age, a.Occupation })
                       .ToList();

Notez que cela renvoie une liste d'un type anonyme plutôt que des instances de Benutzer . Personnellement, je préfère cette approche à la création d'une liste d'instances partiellement remplies, car alors toute personne traitant les instances partielles doit vérifier d'où elles proviennent pour savoir ce qu'il y aura réellement.

EDIT : Si vous voulez vraiment construire des instances de Benutzer et que LINQ ne vous permet pas de le faire dans une requête (je ne sais pas pourquoi), vous pouvez toujours le faire :

List<Benutzer> users = dc.Benutzer
    .Select(a => new { a.Name, a.Age, a.Occupation })
    .AsEnumerable() // Forces the rest of the query to execute locally
    .Select(x => new Benutzer { Name = x.Name, Age = x.Age, 
                                Occupation = x.Occupation })
    .ToList();

c'est-à-dire utiliser le type anonyme juste comme une DTO. Notez que l'objet retourné Benutzer Les objets ne seront cependant pas associés à un contexte.

4voto

qui Points 5259
    List<Benutzer> users = (from a in dc.Benutzer
                            select new Benutzer{
                             myCol= a.myCol,
                             myCol2 = a.myCol2
                             }).ToList();

Je pense que c'est ce que vous voulez si vous voulez faire le même genre de liste. Mais cela suppose que les propriétés que vous définissez ont des setters publics.

1voto

TheVillageIdiot Points 22158

Essayez :

var list = (from a in dc.Benutzer select new {a.Col1, a.Col2, a.Col3}).ToList();

mais maintenant vous avez la liste des objets anonymes et non des objets Benutzer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X