Итак, у меня есть объект, у которого есть свойство навигации, у которого есть тип с иерархией классов. (имена сущностей изменены для защиты виновных)
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.