Entity Framework - запрос, определяющий унаследованный тип для свойства навигации

Итак, у меня есть объект, у которого есть свойство навигации, у которого есть тип с иерархией классов. (имена сущностей изменены для защиты виновных)

class ParentEntity
{
  virtual ChildEntity TheProperty { get; set; }
  virtual string AnotherProperty { get; set; }
  virtual string AnotherProperty2 { get; set; }
}

class ChildEntity
{
}

class ChildSubEntity : ChildEntity
{
  virtual string InterestingProperty { get; set; }
}

Как я могу запросить сущности ParentClass с одним из моих условий запроса, когда TheProperty имеет тип ChildSubClass, а InterestingProperty имеет конкретное значение?

Я пробовал

ObjectContext context = GetContext();
var result = context.ParentEntities.
  Where(e => e.AnotherProperty == AnotherInterestingValue).
  Where(e => e.TheProperty is ChildSubEntity).
  Where(e => ((ChildSubEntity)e.TheProperty).
    InterestingProperty == InterestingValue).
  ToList();

И получите сообщение об ошибке «Невозможно преобразовать тип« ChildEntity »в тип« ChildSubEntity ». LINQ to Entities поддерживает преобразование только примитивных типов модели данных сущности».

Мне приходится довольствоваться сглаживанием списка и применением этого состояние после того, как данные были извлечены из хранилища сущностей. Можно ли записать это условие в форме, которую LINQ to Entities будет принимать?

Для ясности, это упрощение, я фактически применяю ряд условий программно, создавая выражение запроса с помощью LinqKit ], при этом некоторые из условий относятся к свойствам ParentEntity, некоторые - к ParentEntity, а некоторые - к другим дочерним объектам ParentEntity.

8
задан SamStephens 25 August 2011 в 05:26
поделиться