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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top