Question

I know about covariance, and I know that in general it will not be possible in C# until v4.0.

However I am wondering about a specific case. Is there some way of getting converting IQueryable<Derived> to IQueryable<Base> by somehow creating a wrapper class that does not actually perform a query, but can actually "pass through" a .Where<>() call?

My use case is that I am trying to deal with a database schema that has many similar tables. Most of the fields are in common, and many of the common fields need to be queried on each table. I'm using LinqToSql. I was hoping to avoid duplicating all the queries for each table.

Was it helpful?

Solution

Is the following what you are looking for?

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

The OfType method will gather up anything that is of the specified type, and if all items in the collection are either of type Base, or derived from type base, they should qualify. In the subsequent where, all items would be of type Base.

OTHER TIPS

The following will also work, altough it is less pretty:

var results = queryable.Select(derived => (Base)derived).Where(...);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top