Linq: выбор полиморфных объектов в списке выбора - PullRequest
0 голосов
/ 03 мая 2011

Я хочу сделать следующее ...

FROM o IN orders
SELECT new OrderContainer { Contact = (PostalContact) o.Contact  }

Итак, мы надеемся, что вы можете видеть, что «контакт» заказа будет производного типа.К сожалению, однако, это не похоже на полиморфную выборку!Есть ли способ достичь этого?

Приветствия, Ян.

1 Ответ

2 голосов
/ 04 мая 2011

Попробуйте использовать метод расширения .OfType ()

from o in orders 
select new OrderContainer { Contact = o.Contact.OfType<PostalContact>().FirstOrDefault() } 

Редактировать:

способ получить полные данные объекта, но я сомневаюсь, что этого достаточно для ваших нужд.

from c in contacts.OfType<PostalContact>()
where c.Orders.Any(o=>o.Contact.Id == c.id)    
select new OrderContainer { Contact = c } 

с другой стороны, если вы установите базовый класс (сущность) на abstract , вы можете обнаружить, что сущность будет загружать полные объекты. но это не рекомендуется из-за сгенерированных запросов. если вы смотрите на это, вы можете посмотреть ( TPH ) таблицу на иерархию для ваших контактов

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