2013-01-02 3 views
0

je déclarer un dictionnaire avec la clé sur INT et la valeur d'une classe Dictionary<int, List<clsBook>> dicBook = new Dictionary<int, List<clsBook>>();Comment rejoindre 2 rangs ensemble dans un même dictionnaire C#

Je voudrais effectuer une jointure de la ligne dans le dictionnaire lorsqu'un certaine valeur est égale à la deuxième rangée.

Mon code est comme ci-dessous, mais j'obtiens l'erreur "Impossible de convertir implicitement le type System.Collections.Generic.List < System.Collections.Generic.List < clsBOOK>> à System.Collections.Generic.List < clsBook>"

  List<clsBook> aaa = (from OD in dicBook 
          join OD2 in dicBook 
          on OD.Value[1] equals OD2.Value[1] 
          select OD.Value).ToList(); 
+4

Qu'essayez-vous d'accomplir? Il semble inutile de joindre la même valeur dans le même dictionnaire, n'est-ce pas? En dehors de cela, «SelectMany» est ce que vous cherchez. –

+1

Pourriez-vous expliquer en détail ce que vous voulez accomplir? –

Répondre

1

a Dictionary expose une IEnumerable<KeyValuePair<TKey, TValue>>, puisque votre TValue est List<clsBook> vous retrouvez avec un un List<List<clsBook> qui ne peut être attribué à List<clsBook>.

Si vous pouvez décrire ce que vous essayez d'accomplir, comme cela n'est pas évident pour moi, alors je pourrais peut-être vous aider davantage.

Même si vous utilisez SelectMany pour concaténer essentiellement les listes, je ne vois aucune logique dans ce que vous essayez d'atteindre.

Voulez-vous fusionner toutes les listes partageant le même premier élément? Ce que vous faites entraînera au moins un doublement de chaque liste dans le dictionnaire.

1

Essayez le code suivant:

var dicBook = new Dictionary<int, List<clsBook>>(); 
      List<List<clsBook>> aaa = (from OD in dicBook 
           join OD2 in dicBook 
           on OD.Value[1] equals OD2.Value[1] 
           select OD.Value).ToList(); 

Hope this helps.

Questions connexes