2009-10-09 2 views
8

мой код:Простой вопрос Linq: Как выбрать более одного столбца?

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

мне нужен этот код, но я только хочу, чтобы выбрать 3 из 20 столбцов в «Benutzer» -стол. Что такое синтаксис для этого?

+1

У вас есть тип «Benutzer»? Когда-либо рассматривали использование локализованного C#? 'Liste benutzer = (aus a in dc.Benutzer wähle a) .ZuListe();';) –

ответ

20

Вот выражение запроса:

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

Или в точечной нотации:

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

Обратите внимание, что это возвращает список с anonymous type, а не экземпляров Benutzer. Лично я предпочитаю этот подход при создании списка частично заполненных экземпляров, так как тогда каждый, кто имеет дело с частичными экземплярами, должен проверить, пришли ли они, чтобы узнать, что действительно будет там.

EDIT: Если вы действительно хотите построить экземплярам Benutzer и LINQ не позволяя вам делать это в запросе (я не знаю, почему), вы всегда можете сделать:

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

т.е. использование анонимный тип, как DTO. Обратите внимание, что возвращенные объекты Benutzer не будут связаны с контекстом.

+1

Как я могу его типизировать? – Kovu

+2

Что вы подразумеваете под "typisite"? –

+1

Я хочу, чтобы тип был Benutzer, а не анонимным. – Kovu

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

Я думаю, что это то, что вы хотите, если хотите сделать тот же список. Но это предполагает, что свойства, которые вы устанавливаете, имеют публичные сеттеры.

+1

Я получаю сообщение об ошибке, что я не могу использовать «Benutzer» там. – Kovu

+1

Вам нужна запятая, чтобы разделить поля, хотя я сомневаюсь, что это ломается. – qui

+1

Я просто попробовал это на своей машине с очень похожим вариантом использования, и это сработало. Можете ли вы вставить точную ошибку? – qui

1

попробовать:

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

, но теперь у вас есть список анонимного объекта не объекты Benutzer.

Смежные вопросы