Tengo una entidad que tiene una propiedad de navegación que tiene un tipo con una jerarquía de clases. (Nombres de entidad cambiados para proteger a los culpables)Entity Framework - consulta que especifica el tipo heredado para la propiedad de navegación
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; }
}
¿Cómo se puede consultar para las entidades que ParentClass, con uno de mis condiciones de consulta siendo donde theproperty es de tipo ChildSubClass y InterestingProperty tiene un valor particular?
He intentado
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();
Y sale el error "No se puede convertir el tipo 'ChildEntity' al tipo 'ChildSubEntity'. LINQ a Entidades sólo admite fundición modelo de entidad de datos de tipos primitivos.".
Estoy teniendo que conformarme con aplanar la lista y aplicar esta condición después de que los datos se hayan recuperado del almacén de entidades. ¿Es posible escribir esta condición en un formulario LINQ para que las entidades lo acepten?
Para ser claros, esta es una simplificación, en realidad estoy aplicando una serie de condiciones programáticamente, construyendo una expresión de consulta usando LinqKit, con algunas de las condiciones en las propiedades de ParentEntity, algunas en ParentEntity y algunas en otras entidades menores de ParentEntity.
Buena respuesta. Sin embargo, tengo muchos otros criterios sobre ParentEntity que deben cumplirse, voy a editar la pregunta para dejarlo en claro. – SamStephens
Simplemente agregue 'Donde' en' SelectMany' para filtrar 'ParentEntity' –
Ah, ahora que * es * interesante. Tendré una jugada y te llamaré. – SamStephens