Pergunta

Considerando o seguinte arquitetura:

  • um objeto base 'Entity'
  • um objeto derivado 'Entrada: Base de dados'
  • e um objeto ainda mais derivada 'CancelledEntry: Entry'

Em EntitySQL eu posso escrever o seguinte:

[...] where it is of (only MyEntities.Entry) [...]

para retornar apenas objetos do tipo de entrada e nenhuma entidade ou CancelledEntry.

Em LINQ to SQL, o seguinte comando irá retornar objetos do tipo Entrada e CancelledEntry.

EntityContext.EntitySet.OfType<Entry>()

O que é o / função sintaxe a utilizar apenas para retornar objetos do tipo Entry?

Foi útil?

Solução

Por que você não aplicar um método de extensão em IQueryable chamado ApplyBaseEntryFilter (), que iria aplicar esse filtro e retornar um IQueryable .

Este é um exemplo de como reutilizar linq fragmentos de consulta. Usando métodos de extensão em IQueryable é uma ótima maneira de consultas de reutilização como você deve Neve rneed para copiar e colar consulta fragmentos em torno de sua aplicação, espero que ajude.

Outras dicas

Ok, eu ter encontrado uma solução parcial:

EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )

Este é bastante terrível no entanto, uma vez que se eu criar um novo objeto derivado, eu tenho que ir em todas as consultas e, especificamente, adicionar uma condição para removê-lo.

Tem que haver uma solução melhor

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top