2010-12-14 28 views
0

J'utilise VB.Net et ont les éléments suivants requête LINQ ...Charger un tableau à deux dimensions à partir de la requête LINQ?

Dim ACFTTail5 = (From tailcounts In db.TailCounts _ 
       Where tailcounts.Model = "UH-60A" _ 
       Group tailcounts By _ 
       tailcounts.Tail, tailcounts.Model _ 
       Into g = Group Order By Tail _ 
       Select Tail, rdf = CStr(g.Sum(Function(p) _ p.TailCount))).ToArray 

Je suis en train d'obtenir un tableau à deux dimensions comme ci-dessous ..

ACFTTail5 (0)(0) “Tail-a” 
    ACFTTail5 (0)(1) “RDF-a” 
    ACFTTail5 (1)(0) “Tail-b” 
    ACFTTail5 (1)(1) “RDF-b” 
    ACFTTail5 (2)(0) “Tail-c” 
    ACFTTail5 (2)(1) “RDF-c” 

ETC ..

J'ai essayé ...

Dim ACFTTail5(,) As String 

    ACFTTail5 = (From tailcounts In db.TailCounts _ 
       Where tailcounts.Model = "UH-60A" _ 
       Group tailcounts By _ 
       tailcounts.Tail, tailcounts.Model _ 
       Into g = Group Order By Tail _ 
       Select Tail, rdf = CStr(g.Sum(Function(p) p.TailCount))) 

Mais l'erreur suivante ...

« Impossible de jeter l'objet de type 'System.Data.Linq.DataQuery 1[VB$AnonymousType_4 2 [System.String, System.String]]' taper 'System.String [,]'. »

Toutes les suggestions serait grandement apprécié ...

Merci

+0

Y a-t-il une raison particulière pour laquelle vous êtes coincé avec le tableau 2-D? –

Répondre

0

Si vous pourriez être moins concernés par la forcer dans un tableau 2D, vous pouvez simplement permettent au compilateur d'attribuer le type IQueryable anonyme et l'utiliser pour l'itération:

Dim ACFTTail5 = (From tailcounts In db.TailCounts _ 
      Where tailcounts.Model = "UH-60A" _ 
      Group tailcounts By _ 
      tailcounts.Tail, tailcounts.Model _ 
      Into g = Group Order By Tail _ 
      Select Tail, rdf = CStr(g.Sum(Function(p) p.TailCount))) 

Vous pouvez alors simplement utiliser l'itérateur For each pour parcourir tout ce dont vous avez besoin.

Edit:
Je ne l'ai pas testé ce petit morceau par un étirement, mais vous devriez être en mesure d'utiliser une liste

Dim ACFTTail5 as List(Of String()) 

ACFTTail5 = new List(Of String())(From tailcounts In db.TailCounts _ 
      Where tailcounts.Model = "UH-60A" _ 
      Group tailcounts By _ 
      tailcounts.Tail, tailcounts.Model _ 
      Into g = Group Order By Tail _ 
      Select new String() { Tail, rdf = CStr(g.Sum(Function(p) p.TailCount)) }) 

Dim ACFTTail5_2d_Array as String(,) = ACFTTail5.ToArray() 

La clé que j'utilise ici est pour le sélectionner directement dans une nouvelle classe (dans ce cas, un tableau de chaînes), et le conserver dans une liste spécifiquement pour les tableaux de chaînes. Ensuite, vous devriez être capable d'envoyer cela à un tableau de chaînes de tableaux de chaînes.

+0

J'essaye de l'obtenir dans un tableau parce que je dois être capable de trier sur les valeurs "Tail" ou "RDF" plus tard dans l'application. – Bear

+0

@Bear - a publié une mise à jour. Il peut ne pas être parfait ou travailler (le traiter comme code de psuedo), mais l'idée devrait être solide. –

+0

Joel, Cette partie fonctionne .. Dim ACFTTail5 Comme List (Of String()) ACFTTail5 = Nouvelle Liste (Of String()) (De tailcounts Dans db.TailCounts _ Où tailcounts.Model ... ETC cette partie fonctionne et donne un Mais "Dim ACFTTail5_2d_Array As String (,) = ACFTTail5.ToArray" donne une erreur de "Valeur de type 'tableau à 1 dimension de tableau à 1 dimension de Chaîne' ne peut pas être converti en 'tableau à 2 dimensions de Chaîne' parce que '1-dimensional array of String' n'est pas dérivé de 'String' " – Bear