2017-10-19 105 views
-3

我想通過使用C#Linq對「col1」和「col2」進行排序和分組來總結「col3」值。順序,組和總結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); 

我試圖讓輸出作爲

新VAL 1

  • 新VAL 2
  • 新VAL 3

合計 - 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

感謝您的代碼。 –