2014-02-28 21 views
9

Ich versuche, die Summe aus dem Wert aus der Liste der Liste mit Linq zu bekommen? Meine Daten wie unten CodeSumme des Wertes aus der Liste mit linq?

 List<List<string>> allData = new List<List<string>>(); 
     using (StreamReader reader = new StreamReader(path)) 
     { 
      while (!reader.EndOfStream) 
      { 
       List<string> dataList; 
       dataList = reader.ReadLine().Split('|').ToList(); 
       allData.Add(dataList); 
      } 
     } 

, die mir Daten in allData wie unten

  allData-->[0]-->[0]-'name1' 
          [1]-'sub' 
          [2]-'12' 
        [1]-->[0]-'name2' 
          [1]-'sub' 
          [2]-'15' 
        [2]-->[0]-'name1' 
          [1]-'sub2' 
          [2]-'15' 
    //and so on .... 

i angewandt haben gibt Gruppieren, indem ich Gruppierung mit dem Namen, aber ich bin nicht in der Lage, herauszufinden, wie man die Summe der Marken für jeden Namen bekommen?

 var grouped = allData.GroupBy(x => x[0]); 

danach i alle passenden Namen in einem gruppierten erhalten, aber jetzt, wie für diese Gruppe Summe der Noten zu bekommen? Jede Hilfe wäre großartig?

Output should be name1=27 and name2=15 and so on. 
+0

Ist die Zahl immer das dritte Element jeder Liste hinzugefügt werden? –

+0

@BrianSnow Ja, es wird immer das dritte Element sein –

Antwort

6
var grouped = allData.GroupBy(x => x[0]) 
        .Select(g => new 
        { 
         Name = g.Key, 
         Sum = g.Sum(x => int.Parse(x[2])) 
        }); 

Es wird eine anonyme Typ-Instanz für jede Gruppe zurückkehren, mit zwei Eigenschaften: Name mit Ihrem Gruppierungsschlüssel und Sum mit der Summe der Marken.

0

Dies gibt Ihnen eine parallele Liste mit jedem Namen und die Anzahl, wie oft jeder Name auftritt.

Auch ... möchten Sie vielleicht hinzufügen, wenn Sie alldata gruppiert zuweisen. Ich verwende dies, um eine Liste von der größten bis zur kleinsten Anzahl von Vorkommen zu erhalten.

var grouped = allData.GroupBy(x => x[0]).OrderByDescending(i => i.Count()); 
+0

Ich möchte nicht den Namen zählen, wenn Sie die Frage betrachten, ich möchte die Summe des dritten Elements aus der inneren Liste. –

+0

oh, sorry. Ich war verwirrt von der "Ausgabe" Zeile ..... es heißt "Ausgabe sollte name1-27 und name = 15 und so weiter ..." -> sollte es sein: "Ausgabe sollte name1 = 27 und name2 sein = 15 und so weiter ... "..... Wie auch immer ich etwas Neues gelernt habe, das war eine einzigartige Frage und das sind großartige Lösungen für Ihr Problem! – JustSomeDude

17

Nicht sicher, ob Sie die Summe jeder Gruppe oder die Summe erhalten möchten. Wenn es die Gesamt ist dann sollte dies tun, den Trick

var sum = allData.Sum(x => Int32.Parse(x[2])); 

Wenn es pro Taste ist dann die versuchen folgende

var all = allData 
    .GroupBy(x => x[0]) 
    .Select(x => x.Sum(y => Int32.Parse(y[2])); 
+0

Danke für Hilfe! –

0

Zunge so weit wie möglich an die LINQ Abfragesprache:

var grouped = from d in allData 
       group d by i[0] into g 
       select new 
       { 
        Name = g.Key, 
        Sum = g.Sum(i => int.Parse(i[2])) 
       }; 
Verwandte Themen