2017-10-19 6 views
-3

"col1"と "col2"をC#Linqで並べ替えてグループ化して、 "col3"の値を合計しようとしています。私は新ヴァル2 Order、group and sum ExpandoObjectの配列リストc#

  • 新ヴァル3

  • 新ヴァル1

    • として出力を取得しようとしています

      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); 
      

      合計 - 30

    +1

    あなたの問題は何ですか? –

    +0

    私はlinqを初めて使っています。私の結果を得るための正しいクエリを見つけることができました。 –

    +2

    あなたが試したことを示してください。また、あなたの希望する出力はあまり明確ではありません。説明してください –

    答えて

    0

    ExpandoObjectを作成しますが、辞書のようにそれを使用する理由は何ですか?プロパティ(col1、col2、col3)のセットがわかっている場合は、別のクラスを作成する方が良いでしょう。そうでなければ、このようにすることができます。

    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

    コードをありがとう。 –