2009-05-30 5 views
0

J'ai une collection dans les sections de menu qui contiennent chacune une collection d'éléments de menu (c'est un menu à deux niveaux, des choses simples). Idéalement, je pourrais télécharger la collection de MenuSection pour saisir les MenuItems en même temps, mais à défaut, est-il possible de renvoyer une Collection séparée de chacun en utilisant un seul appel de base de données via subsonic? Suis-je coincé en utilisant un DataSet avec plusieurs tables?Retour de plusieurs collections dans SubSonic

Répondre

0

Oui - il existe des moyens de le faire - de nombreuses approches différentes. Vous pouvez utiliser une vue et charger tout, puis l'extraire vers un ensemble d'objets structurés. Ou vous pouvez exécuter une requête jointe dans un lecteur de données et charger les objets avec une logique de bouclage.

+0

Rob, merci pour la réponse. Je ne comprends pas très bien ce que vous entendez par "spin out" - voulez-vous dire que je devrais charger une collection de lignes contenant les données des deux sections de menu et des éléments? Avec le lecteur et la mise en boucle, cela ne signifierait-il pas l'obtention d'une collection de sections, puis un appel distinct pour chaque groupe d'articles? –

+0

Par "spin out", je veux dire boucle sur le lecteur et attribuer les valeurs à une collection. Si vous utilisez une vue, vous pouvez obtenir une représentation plate des données. Si vous utilisez une requête jointe - même chose - une représentation plate des données avec lesquelles vous remplissez les deux collections. –

0

Ce que Rob a dit est correct. Un autre angle serait comme si:

Partial Public Class MenuSection 

Private _ChildMenus As Generic.List(Of MenuSection) 
Public Property ChildMenus() As Generic.List(Of MenuSection) 
    Get 
     If _ChildMenus Is Nothing Then 
      ' Load the data in the list 
      _ChildMenus = New SubSonic.Select().From(Data.MenuSelection). _ 
      Where("ParentMenuItemId").IsEqualTo(1). _ 
      ExecuteTypedList(Of Data.MenuSelection)() 
     End If 
     Return _ChildMenus 
    End Get 
    Set(ByVal value As Generic.List(Of MenuSection)) 
     _ChildMenus = value 
    End Set 
End Property 

End Class

Questions connexes