EF4, как я могу преобразовать анонимный тип в сильный тип в LINQ - PullRequest
6 голосов
/ 26 сентября 2011

Код LINQ возвращает анонимный тип. Как я могу вернуть строгий тип «Клиенты»? Я возвращаю анонимный тип, поскольку хочу выбрать только некоторые поля из сущности.

var customer = from c in _entities.Customers
                           join con
                           in _entities.Contracts on c.CustomerID equals con.customerID
                           where con.contractNo == number
                           select new
                           {
                               Surname = c.Surname,
                               Forename= c.Forename,
                               Address = c.Address,
                               Suburb = c.Suburb,
                               State = c.State,
                               Postcode = c.PostCode,
                               PhoneNo = c.PhoneNo
                       };

Спасибо

Ответы [ 2 ]

6 голосов
/ 26 сентября 2011

Либо выполните

var customer = from c in _entities.Customers
                       join con
                       in _entities.Contracts on c.CustomerID equals con.customerID
                       where con.contractNo == number
                       select c;

, чтобы выбрать экземпляры клиентов с помощью «как есть», либо

Customer customer = (from c in _entities.Customers
                       join con
                       in _entities.Contracts on c.CustomerID equals con.customerID
                       where con.contractNo == number
                       select new Customer{
                           Surname = c.Surname,
                           Forename= c.Forename,
                           Address = c.Address,
                           Suburb = c.Suburb,
                           State = c.State,
                           Postcode = c.PostCode,
                           PhoneNo = c.PhoneNo
                       }).FirstOrDefault();

, чтобы создать новые экземпляры клиентов с использованием только тех свойств, которые вас интересуют.(при условии, что класс клиента имеет конструктор без параметров)

2 голосов
/ 26 сентября 2011

Похоже, вы ищете всех клиентов, у которых есть какой-либо контракт с contractNo, который соответствует number - не используйте объединение, вместо этого используйте свойство навигации EF:

var customers = _entities.Customers
                         .Where( c => c.Contracts.Any( x => x.contractNo == number));

Если есть только один (или, возможно, ни один) из этих клиентов, используйте SingleOrDefault(), чтобы просто извлечь одну Customer сущность:

Customer customer = _entities.Customers
                             .Where( c => c.Contracts.Any( x => x.contractNo == number))
                             .SingleOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...