Используйте Queryable. Выберите <TSource, TResult
> , чтобы спроецировать коллекцию:
var customers = ctx
.Customers
.Where(x => x.FirstName == "Joe")
.Select(x => new { ID = x.CustomerId, Name = x.CustomerName })
.ToList();
Обратите внимание, что результаты будут проецироваться в List<T>
анонимных типов.
Если вы хотите спроецировать его на что-то другое (например, пользовательский класс / POCO), вам нужно будет объединить результирующий набор сначала и , а затем проецировать запрос (например .ToList()
, а затем .Select()
).
Другими словами, если вы сделаете это:
var customers = ctx
.Customers
.Where(x => x.FirstName == "Joe")
.Select(x => new CutDownCustomer { ID = x.CustomerId, Name = x.CustomerName })
.ToList(); // fire query
Вы получите ошибку EF (невозможно преобразовать в запрос Linq-Entities - поскольку «CutDownCustomer» не является частью концептуальной модели).
Итак, вы должны сделать это:
var customers = ctx
.Customers
.Where(x => x.FirstName == "Joe")
.ToList() // fire query
.Select(x => new CutDownCustomer { ID = x.CustomerId, Name = x.CustomerName });
Конечно, если вам требуется только область действия метода для набора результатов, анонимных типов должно быть достаточно.
НТН.