绑定到asp.net中的linq继承类型

绑定到asp.net中的linq继承类型,asp.net,vb.net,linq,.net-3.5,Asp.net,Vb.net,Linq,.net 3.5,我有一个Linq-to-SQL数据模型,其中包括一个类型Party,该类型为公司和个人的两个子类。我尝试将两个转发器绑定到Linq到SQL查询,如下所示 Dim oComp As IEnumerable(Of Company) Dim oInd As IEnumerable(Of Individual) oComp = From oP As Company In ERM.Parties _ Where TypeOf (oP) I

我有一个Linq-to-SQL数据模型,其中包括一个类型
Party
,该类型为
公司
个人
的两个子类。我尝试将两个转发器绑定到Linq到SQL查询,如下所示

    Dim oComp As IEnumerable(Of Company)
    Dim oInd As IEnumerable(Of Individual)

        oComp = From oP As Company In ERM.Parties _
                 Where TypeOf (oP) Is Company And _
                 oP.Name.StartsWith(sSearchString)

        oInd = From oP As Individual In ERM.Parties _
                Where TypeOf (oP) Is Individual And _
                (oP.FirstName.StartsWith(sSearchString) Or _
                oP.LastName.StartsWith(sSearchString))

        rptIndividuals.DataSource = oInd
        rptCompanies.DataSource = oComp

        rptCompanies.DataBind()
        rptIndividuals.DataBind()
当我按预期单步执行代码
oComp
oInd
时,它们是
IEnumerable
IEnumerable
,但是当到达第一个
DataBind
调用时,我得到以下异常

用户代码未处理System.MissingMethodException Message=“找不到类型为”System.Data.Linq.Provider.DataBindingList
1[[DataModel.Party,DataModel,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]”的构造函数。”
Source=“mscorlib”
堆栈跟踪:
位于System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr、Binder Binder、Object[]args、CultureInfo区域性、Object[]ActivationAttribute)
在System.Activator.CreateInstance(类型类型、BindingFlags bindingAttr、Binder Binder、对象[]参数、CultureInfo区域性、对象[]ActivationAttribute)
位于System.Data.Linq.Provider.BindingList.Create[T](DataContext上下文,IEnumerable
1序列) 在System.Data.Linq.DataQuery
1.GetNewBindingList()中
位于System.Data.Linq.DataQuery
1.System.ComponentModel.IListSource.GetList()处 位于System.Web.UI.DataSourceHelper.GetResolvedDataSource(对象数据源,字符串数据成员) 位于System.Web.UI.WebControl.ReadOnlyDataSource.System.Web.UI.IDataSource.GetView(字符串viewName) 在System.Web.UI.WebControl.Repeater.ConnectToDataSourceView()中 在System.Web.UI.WebControls.Repeater.GetData()中 位于System.Web.UI.WebControl.Repeater.CreateControlHierarchy(布尔useDataSource) 位于System.Web.UI.WebControl.Repeater.OnDataBinding(EventArgs e) 在System.Web.UI.WebControls.Repeater.DataBind()中 在parties.lbHiddenPostback\单击\parties.aspx.vb中的(对象发送者,事件参数e):第491行 在System.Web.UI.WebControl.LinkButton.OnClick(EventArgs e)中 位于System.Web.UI.WebControl.LinkButton.RaisePostBackEvent(String eventArgument) 位于System.Web.UI.WebControl.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串事件参数) 位于System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument) 位于System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 在System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) 内部异常:

然后,如果我选择所有的内容作为参与方,则一切正常

    Dim oComp As IEnumerable(Of Party)
    Dim oInd As IEnumerable(Of Party)


        oComp = From oP In ERM.Parties _
                Where TypeOf (oP) Is Company And _
                CType(oP, Company).Name.StartsWith(sSearchString)

        oInd = From oP In ERM.Parties _
                Where TypeOf (oP) Is Individual And _
                (CType(oP, Individual).FirstName.StartsWith(sSearchString) Or _
                CType(oP, Individual).LastName.StartsWith(sSearchString))

        rptIndividuals.DataSource = oInd
        rptCompanies.DataSource = oComp

        rptCompanies.DataBind()
        rptIndividuals.DataBind()
两个转发器中都没有与返回的数据相关的内容,只是项模板中的一个标签,用于显示每个查询返回了多少条记录


必须绑定到父类型对我来说没有意义,如果不首先强制转换到该类型,我将无法访问与个人和公司关联的属性

在设置中继器的
数据源
属性时,可以使用
.ToArray()
来解决此问题

rptCompanies.DataSource = oComp.ToArray ()
我不相信我知道它为什么会起作用,但我试过了,它似乎解决了问题