Код первый: запрос по дискриминатору.Я знаю, мне не нужно - PullRequest
2 голосов
/ 23 января 2012

Я создал TPH с первым кодом TPH и добавил атрибут NotMappedAttribute в необходимый столбец дискриминатора.Я могу добавить DbSets в свой контекст для подклассов и запросить эти типизированные наборы, и code-first все еще мой друг.

Однако, скажем, у меня есть объект, который сам содержит коллекцию BaseType, некоторые из которыхбыть одного типа, а некоторые другого.Как мне написать запрос, чтобы получить напечатанные записи?Кстати, я не хочу этого делать с загруженной в память коллекцией в памяти.

Предположим, что есть класс Association и некоторые подклассы AssocA и AssocB, которые все отображаются в таблицу ассоциаций и различаются поAssocationTypeId.Теперь предположим, что у вас есть сущность - для аргументов назовите ее Employee.Например,

class Employee
{
  public virtual Collection<Associations> MyAssociations {get;set;}
}

Теперь я хочу запросить базу данных, чтобы найти сотрудников с AssocA =?.Я не хочу, чтобы какая-либо ассоциация была равна?но конкретная типизированная ассоциация.Я не могу использовать GetType, потому что LinqToEntities не может с этим работать.Я не могу использовать AttributeTypeId, потому что он используется в первом сопоставлении кода.

Чего мне не хватает?То, что я делаю, разумно.Но я не могу смоделировать это.

1 Ответ

5 голосов
/ 23 января 2012

OfType оператор, вероятно, то, что вы ищете:

var query = from e in context.Employees
            where e.MyAssociations.OfType<AssocA>().Any()
            select e;

Это найдет только тех сотрудников, у которых есть хотя бы одна ассоциация типа AssocA.

...