2009-10-09 12 views
8

mein Code:Einfache Linq Frage: Wie mehrere Spalten auszuwählen?

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

Ich brauche diesen Code, aber ich möchte nur 3 der 20 Spalten auszuwählen, die in der "Benutzer" -Tabelle. Was ist die Syntax dafür?

+1

Sie haben den Typ 'Benutzer'? Überhaupt gedacht, lokalisierte C# zu verwenden? 'Liste benutzer = (aus a in d.c.Benutzer wähle a) .ZuListe();';) –

Antwort

20

Hier ist eine Abfrage-Ausdruck:

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

Oder in Punktnotation:

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

Beachten Sie, dass dies eine Liste eines anonymous type gibt eher als Instanzen von Benutzer. Persönlich bevorzuge ich diesen Ansatz gegenüber dem Erstellen einer Liste von teilweise bevölkerten Instanzen, da dann jeder, der sich mit den Teilinstanzen befasst, überprüfen muss, ob sie von ihm gekommen sind, um herauszufinden, was wirklich da sein wird.

EDIT: Wenn Sie wirklich Instanzen von Benutzer aufbauen wollen, und LINQ ist nicht lassen Sie so in einer Abfrage zu tun (ich bin nicht sicher, warum) konnte man immer tun:

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(); 

dh Nutzung der anonyme Typ nur als DTO. Beachten Sie, dass die zurückgegebenen Objekte Benutzer nicht mit einem Kontext verknüpft sind.

+1

Wie kann ich es typisieren? – Kovu

+2

Was meinst du mit "typisite"? –

+1

Ich möchte den Typ Benutzer sein, nicht anonym. – Kovu

4

Ich denke, das ist, was Sie wollen, wenn Sie die gleiche Art von Liste machen möchten. Aber das setzt voraus, dass die Eigenschaften, die Sie festlegen, öffentliche Setter haben.

+1

Ich bekomme einen Fehler, dass ich "Benutzer" dort nicht verwenden kann. – Kovu

+1

Sie brauchen ein Komma, um die Felder zu trennen, obwohl ich bezweifle, dass es deshalb bricht – qui

+1

Ich habe es gerade auf meiner Maschine mit einem sehr ähnlichen Anwendungsfall versucht und es hat funktioniert. Können Sie den genauen Fehler einfügen? – qui

1

Versuch:

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

aber jetzt haben Sie Liste von anonymen Objekt nicht von Benutzer-Objekte.