Ich habe ein Setup, wo ich Linq2SQL Vererbung verwendet. Um Abfragen zu erleichtern, belichten ich die abgeleiteten Typen in der Datacontext als auch, wie die folgenden:Linq2SQL geerbte Typen und OfType-Abfrage
public IQueryable<Derived> Derivations
{
get { return Bases.OfType<Derived>(); } // filter list on type
}
Aufruf dieser perfekt funktioniert, und ich kann die SQL sehen korrekt erzeugt wird. Der Hintergrundtyp ist DataQuery <T>.
Das Problem tritt auf, wenn ich IEnumerable einer Datenquelle (entweder ein Steuerelement oder eine BindingSource) zuweisen.
Von was ich sehen kann, wird das DataQuery-Objekt für eine IListSource abgefragt. Und das liefert es glücklich. Anschließend wird eine BindingList erstellt, die fehlschlägt, da der Typparameter der beiden angegebenen Argumente (IEnumerable <Derived> und Tabelle <Base>) nicht übereinstimmt. Es wird eine Ausnahme von MissingMethod ausgelöst, da der Konstruktor nicht gefunden werden kann.
Die einfache Problemumgehung ist nur ToList() auf dem IQueryable <abgeleiteten> vor dem Zuweisen der Datenquelle und dann funktioniert es, aber das ist ziemlich ermüdend.
Irgendwelche Vorschläge, um dies zu handhaben, ohne das IQueryable "zu verlieren"?
Dank
leppie
UPDATE:
Der Fehler jetzt zu MS berichtet wurde. Mehr Details here. Danke Marc!
Danke :) Hehe, ich habe die lange Entdeckungsroute über Reflector genommen :) – leppie
@leppie - ach, mir ist schon schmerzlich vertraut mit der Route solche Bindungen nehmen ... –