Domanda

So che sulla covarianza, e so che, in generale, non sarà possibile in C# fino a v4.0.

Tuttavia mi chiedo su un caso specifico.C'è qualche modo di ottenere la conversione IQueryable<Derived> per IQueryable<Base> in qualche modo creando una classe wrapper che in realtà non eseguire una query, ma in realtà può "passare attraverso" un .Where<>() chiamata?

Il mio caso d'uso è che sto cercando di fare con lo schema di un database che ha molte tabelle simili.La maggior parte dei campi sono in comune, e molti dei campi devono essere interrogato su ogni tavolo.Sto usando LinqToSql.Speravo di evitare la duplicazione di tutte le query per ogni tabella.

È stato utile?

Soluzione

È il seguito di quello che stai cercando?

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

L'oggetto oftype metodo di raccogliere tutto ciò che è del tipo specificato, e se tutti gli elementi della collezione sono di tipo Base, o deriva da un tipo di base, devono qualificarsi.Nella successiva dove, tutti elementi di Base di tipo.

Altri suggerimenti

Di seguito sarà anche funzionare, anche se è meno bella:

var results = queryable.Select(derived => (Base)derived).Where(...);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top