2017-10-19 16 views
-3

J'essaie de faire la somme des valeurs "col3" en ordonnant et en regroupant les "col1" et "col2" en utilisant C# Linq.Ordre, groupe et somme Liste de tableau dans ExpandoObject C#

List<dynamic> list = new List<dynamic>(); 

    dynamic expando = new ExpandoObject(); 
dynamic expando1 = new ExpandoObject(); 

    var p = expando as IDictionary<string, object>; 

    p["col1"] = "New val 1"; 
    p["col2"] = "New val 2"; 
    p["col3"] = 20; 

    list.Add(p); 

    var q = expando1 as IDictionary<string, object>; 

    q["col1"] = "New val 1"; 
    q["col2"] = "New val 3"; 
    q["col3"] = 10; 

    list.Add(q); 

Je suis en train d'obtenir la sortie comme

New val 1

  • New val 2
  • New val 3

Total - 30

+1

Et quel est le problème que vous avez? –

+0

Je suis nouveau à linq. Pourrait trouver la bonne requête pour obtenir mon résultat. –

+2

S'il vous plaît montrer ce que vous avez essayé. En outre, votre sortie souhaitée n'est pas très claire. Veuillez expliquer –

Répondre

0

Quelle est la raison de la création ExpandoObject, mais en utilisant comme un dictionnaire? Si vous connaissez l'ensemble des propriétés (col1, col2, col3), il serait préférable de créer une classe séparée pour cela, sinon cela pourrait être fait comme ceci.

var list = new List<dynamic>(); 
dynamic e1 = new ExpandoObject(); 
e1.col1 = "New val 1"; 
e1.col2 = "New val 2"; 
e1.col3 = 20; 
list.Add(e1); 

dynamic e2 = new ExpandoObject(); 
e2.col1 = "New val 1"; 
e2.col2 = "New val 3"; 
e2.col3 = 10; 
list.Add(e2); 

foreach (var group in list 
    .OrderBy(e => e.col1) 
    .GroupBy(o => o.col1)) 
{ 
    Debug.WriteLine((string)group.Key); 
    var sum = 0; 
    foreach (var item in group) 
    { 
     Debug.WriteLine(" " + (string)item.col2); 
     sum += item.col3; 
    } 

    Debug.WriteLine("Total: " + sum); 
} 
+0

Merci pour le code. –