Pergunta

Eu sei sobre covariância, e eu sei que, em geral, não será possível em C # até v4.0.

No entanto, eu estou querendo saber sobre um caso específico. Existe alguma maneira de conseguir converter IQueryable<Derived> para IQueryable<Base> por alguma forma criar uma classe wrapper que na verdade não executar uma consulta, mas pode realmente "passar por" uma chamada .Where<>()?

Meu caso de uso é que eu estou tentando lidar com um esquema de banco de dados que tem muitas tabelas semelhantes. A maioria dos campos são em comum, e muitos dos campos comuns precisam ser consultado em cada mesa. Estou usando LinqToSql. Eu estava esperando para evitar a duplicação de todas as consultas para cada tabela.

Foi útil?

Solução

É o seguinte o que você está procurando?

var results = queryable.OfType<Base>.Where(...);

O método OfType vai reunir-se tudo o que é do tipo especificado, e se todos os itens na coleção são ou do tipo Base, ou derivados de tipo base, eles devem se qualificar. Na posterior onde, todos os itens seria do tipo Base.

Outras dicas

A seguir irá também trabalho, embora seja menos bonito:

var results = queryable.Select(derived => (Base)derived).Where(...);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top