Простой вопрос Linq: Как выбрать более одного столбца? - PullRequest
9 голосов
/ 09 октября 2009

мой код:

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

Мне нужен этот код, но я хочу выбрать только 3 из 20 столбцов в таблице "Benutzer". Какой синтаксис для этого?

Ответы [ 3 ]

22 голосов
/ 09 октября 2009

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

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

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

РЕДАКТИРОВАТЬ: Если вы действительно хотите создать экземпляры 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 не будут связаны с контекстом.

4 голосов
/ 09 октября 2009
    List<Benutzer> users = (from a in dc.Benutzer
                            select new Benutzer{
                             myCol= a.myCol,
                             myCol2 = a.myCol2
                             }).ToList();

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

1 голос
/ 09 октября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...