Frage

Ich weiß, über Kovarianz, und ich weiß, dass es im Allgemeinen in C # nicht möglich sein, bis v4.0.

Allerdings frage ich mich, über einen bestimmten Fall. Gibt es eine Möglichkeit des Erhaltens IQueryable<Derived> Umwandlung von irgendwie Erstellen einer Wrapper-Klasse IQueryable<Base>, der nicht wirklich eine Abfrage durchführen, kann aber tatsächlich „passieren“ ein .Where<>() Anruf?

Ihr Anwendungsfall ist, dass ich mit einem Datenbankschema umgehen versuchen, die viele ähnlichen Tabellen hat. Die meisten Felder sind gemeinsam, und viele der gemeinsamen Felder müssen auf jeder Tabelle abgefragt werden. Ich verwende LinqToSql. Ich hatte gehofft, alle Abfragen für jede Tabelle zu vermeiden, zu duplizieren.

War es hilfreich?

Lösung

Ist der folgenden, was Sie suchen?

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

Die OfType Methode wird bis alles sammeln, die von dem angegebenen Typ ist, und wenn alle Elemente in der Sammlung entweder vom Typ Basis sind, oder von Typ-Basis abgeleitet, sollten sie sich qualifizieren. In der anschließenden, wo alle Elemente des Typs Basis sein würde.

Andere Tipps

Im Folgenden wird auch funktionieren, obwohl es weniger schön ist:

var results = queryable.Select(derived => (Base)derived).Where(...);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top