2008-11-26 6 views
0

j'ai un modèle de données LINQ-to-SQL qui comprend un type Party qui est classée sous deux fois pour Company et Individual. Je suis en train de lier deux répéteurs à LINQ to SQL requêtes comme suitliaison à linq hérité types dans asp.net

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() 

quand je fais un pas dans le code oComp et oInd sont IEnumerable<Company> et IEnumerable<Individual> comme prévu, mais je reçois l'exception suivante lorsque le premier DataBind appel est atteinte

System.MissingMethodException était non gérée par le code utilisateur message = "constructeur du type « 1[[DataModel.Party, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' not found." Source="mscorlib" StackTrace: at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Data.Linq.Provider.BindingList.Create[T](DataContext context, IEnumerable System.Data.Linq.Provider.DataBindingList une séquence) à System.Data.Linq.DataQuery 1.GetNewBindingList() at System.Data.Linq.DataQuery 1.System.ComponentModel.IListSource.GetList() à System.Web.UI.DataSourceHelper.GetResolvedDataSource (Object dataSource, String DataMember) à System.Web.UI.WebControls.ReadOnlyDataSource.System.Web.UI.IDataSource. GetView (String viewName) à System.Web.UI.WebControls.Repeater.ConnectToDataSourceView() à System.Web.UI.WebControls.Repeater.GetData() à System.Web.UI.WebControls.Repeater.CreateControlHierarchy (Boolean useDataSource) à System.Web.UI.WebControls.Repeater.OnDataBinding (EventArgs e) à System.Web.UI.WebControls.Repeater.DataBind() à parties.lbHiddenPostback_Click (Object expéditeur, EventArgs e) dans \ parties. aspx.vb: ligne 491 à System.Web.UI.WebControls.LinkButton.OnC lécher (EventArgs e) à System.Web.UI.WebControls.LinkButton.RaisePostBackEvent (String eventArgument) à System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) au système .Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler SourceControl, String eventArgument) à System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) à System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException :

si je sélectionne alors tout comme parties plutôt comme suit, tout fonctionne bienIl n'y a rien dans l'un ou l'autre répéteur qui se rapporte aux données retournées, juste une étiquette dans le modèle d'élément pour montrer combien d'enregistrements sont retournés pour chaque requête.

Cela ne me semble pas logique que je doive me lier au type parent, je serai incapable d'accéder aux attributs associés à Individuel et Société sans d'abord lancer ce type!

Répondre

1

Vous pouvez résoudre ce problème en utilisant .ToArray() lorsque vous configurez la propriété DataSource du répéteur ...

rptCompanies.DataSource = oComp.ToArray()

Je suis convaincu que je sais pas pourquoi cela fonctionne - mais je l'ai essayé et il semble résoudre le problème!

Questions connexes