Marco de la entidad:cómo devolver un tipo base de L2E
-
01-07-2019 - |
Pregunta
Considerando la siguiente arquitectura:
- un objeto base 'Entidad'
- un objeto derivado 'Entrada:Base'
- y un objeto derivado adicional 'CancelledEntry:Entry'
En EntitySQL puedo escribir lo siguiente:
[...] where it is of (only MyEntities.Entry) [...]
para devolver solo objetos de tipo Entrada y ninguna Entidad o Entrada Cancelada.
En linq to sql, el siguiente comando devolverá objetos de tipo Entrada y CancelledEntry.
EntityContext.EntitySet.OfType<Entry>()
¿Cuál es la sintaxis/función a utilizar para devolver solo objetos de tipo Entrada?
Solución
¿Por qué no aplica un método de extensión en IQueryable< Entry > llamado ApplyBaseEntryFilter() que aplicaría este filtro y devolvería un IQueryable< Entry >?
Este es un ejemplo de cómo reutilizar fragmentos de consultas de LINQ.Usar métodos de extensión en IQueryable< Entity > es una excelente manera de reutilizar consultas, ya que nunca debería necesitar copiar y pegar fragmentos de consultas en su aplicación, espero que le ayude.
Otros consejos
Ok, he encontrado una solución parcial:
EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )
Sin embargo, esto es bastante terrible, ya que si creo un nuevo objeto derivado, tengo que realizar todas las consultas y agregar específicamente una condición para eliminarlo.
Tiene que haber una mejor solución.