J'ai une configuration où j'ai utilisé l'héritage Linq2SQL. Pour effectuer des requêtes plus facile, j'expose les types dérivés du DataContext ainsi, comme ce qui suit:Types hérités Linq2SQL et requête OfType
public IQueryable<Derived> Derivations
{
get { return Bases.OfType<Derived>(); } // filter list on type
}
Appel cela fonctionne parfaitement, et je peux voir le SQL généré correctement. Le type de support est DataQuery <T>.
Le problème survient lorsque j'attribue ce IEnumerable à une source de données (un contrôle ou une BindingSource). D'après ce que je peux voir, l'objet DataQuery est interrogé pour un IListSource. Et cela fournit heureusement cela. Ensuite, il procède à la création d'une BindingList, qui échoue en tant que paramètre de type des 2 arguments fournis (IEnumerable < Dérivé > et Table <Base>) ne correspond pas. Il soulève une exception de MissingMethod car le constructeur ne peut pas être trouvé.
La solution de contournement simple est juste d'appeler ToList() sur le IQueryable < dérivé > avant d'affecter à la source de données, puis cela fonctionne, mais c'est assez fatigant.
Des suggestions pour gérer cela sans «perdre» le IQueryable?
Merci
leppie
MISE À JOUR:
Le bug a maintenant été signalé à MS. Plus de détails here. Merci Marc!
Merci :) Hehe, j'ai pris la longue route d'enquête via Reflector :) – leppie
@leppie - hélas, je suis déjà douloureusement familier avec la route de telles liaisons prennent ... –