我有一个使用 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>)的类型参数不匹配,该 BindingList 失败。由于找不到构造函数,它会引发 MissingMethod 异常。
简单的解决方法是在分配给数据源之前在 IQueryable<Derived> 上调用 ToList() ,然后它就可以工作了,但这很累人。
有什么建议可以在不“丢失” IQueryable 的情况下处理这个问题?
谢谢
雷比
更新:
该错误现已报告给 MS。更多细节在这里。谢谢马克!