Итак, у меня есть объект, у которого есть свойство навигации, имеющее тип с иерархией классов. (имена субъектов изменены для защиты виновных)
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 поддерживает только приведение типов примитивов модели данных Entity. ".
Мне нужно согласиться на выравнивание списка и применение этого условия после извлечения данных из хранилища сущностей. Можно ли записать это условие в форме, которую LINQ to Entities примет?
Для ясности, это упрощение, на самом деле я применяю ряд условий программно, строю выражение запроса с использованием LinqKit , причем некоторые условия относятся к свойствам ParentEntity, некоторые к ParentEntity. и некоторые другие дочерние объекты ParentEntity.