Linq2SQL 継承を使用したセットアップがあります。クエリを簡単にするために、次のように派生型も DataContext で公開します。
public IQueryable<Derived> Derivations
{
get { return Bases.OfType<Derived>(); } // filter list on type
}
これを呼び出すと完全に機能し、SQL が正しく生成されていることがわかります。バッキング タイプは DataQuery<T> です。
この IEnumerable をデータソース (コントロールまたは BindingSource) に割り当てると、問題が発生します。
私が見る限り、DataQuery オブジェクトは IListSource に対してクエリされます。そして、それは喜んでこれを提供します。次に、BindingList の作成に進みますが、指定された 2 つの引数 (IEnumerable<Derived> と Table<Base>) の型パラメーターが一致しないため失敗します。コンストラクターが見つからないため、MissingMethod の例外が発生します。
簡単な回避策は、データソースに割り当てる前に IQueryable<Derived> で ToList() を呼び出すことです。これは機能しますが、これは非常に面倒です。
IQueryable を「失う」ことなくこれを処理するための提案はありますか?
ありがとう
レピー
アップデート:
このバグは現在、MS に報告されています。詳細はこちら。ありがとうマルク!