Pregunta

Yo sé de covarianza, y sé que en general no será posible en C # hasta v4.0.

Sin embargo, me pregunto acerca de un caso específico. ¿Hay alguna manera de conseguir la conversión IQueryable<Derived> a IQueryable<Base> mediante la creación de algún modo una clase contenedora que en realidad no realiza una consulta, pero puede "pasar a través" en realidad una llamada .Where<>()?

Mi caso de uso es que estoy tratando de hacer frente a un esquema de base de datos que tiene muchas tablas similares. La mayoría de los campos son en común, y muchos de los campos comunes tienen que ser consultados en cada mesa. Estoy usando LinqToSql. Tenía la esperanza de evitar la duplicación de todas las consultas para cada tabla.

¿Fue útil?

Solución

es la siguiente lo que está buscando?

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

El método OfType va a recoger todo lo que es del tipo especificado, y si todos los elementos de la colección son o bien del tipo de base, o derivados de tipo base, deben calificar. En el posterior donde, todos los artículos serían de tipo base.

Otros consejos

Lo siguiente también funcionará, aunque es menos bonita:

var results = queryable.Select(derived => (Base)derived).Where(...);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top