2009-10-09 6 views
8

mon code est:Question Linq simple: Comment sélectionner plus d'une colonne?

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

je besoin de ce code, mais je veux seulement sélectionner 3 des 20 colonnes dans la "Benutzer" -Table. Quelle est la syntaxe pour cela?

+1

Vous avez le type 'Benutzer'? Avez-vous déjà envisagé d'utiliser C# localisé? 'Liste benutzer = (aus a dans dc.Benutzer wähle a) .ZuListe();';) –

Répondre

20

est ici une expression de requête:

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

Ou en notation point:

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

Notez que ce retourne une liste d'une anonymous type plutôt que des cas de Benutzer. Personnellement, je préfère cette approche à la création d'une liste d'instances partiellement peuplées, car toute personne traitant des instances partielles doit vérifier si elles viennent de savoir ce qui sera vraiment là.

EDIT: Si vous voulez vraiment construire des instances de Benutzer et LINQ ne vous laissez le faire dans une requête (je ne sais pas pourquoi), vous pouvez toujours 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(); 

à savoir l'utilisation le type anonyme juste comme un DTO. Notez que les objets Benutzer retournés ne seront pas associés à un contexte.

+1

Comment je peux le typiser? – Kovu

+2

Que voulez-vous dire par "typisite"? –

+1

Je veux que le type soit Benutzer, pas anonyme. – Kovu

4
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 paramètres publics.

+1

Je reçois une erreur, que je ne peux pas utiliser "Benutzer" là-bas. – Kovu

+1

Vous avez besoin d'une virgule pour séparer les champs, bien que je doute que c'est pourquoi il se casse – qui

+1

Je viens de l'essayer sur ma machine avec un cas d'utilisation très similaire et cela a fonctionné. Pouvez-vous coller l'erreur exacte? – qui

1

essayer:

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

mais maintenant vous avez la liste d'objet anonyme d'objets non Benutzer.