2010-10-25 58 views
1

我遇到了LINQ表達式的問題。如何製作一個Linq表達式

有了這個類:

class MyClass 
{ 
    public string of { get; set; } 
    public string order { get; set; } 
    public int qty { get; set; } 

    public override string ToString() 
    { 
     return string.Format("OF: {0}, Order: {1}, Qty: {2}", of, order, qty); 
    } 
} 

,我想通過和總結的所有數量由ORDER 有了這些數據:

var list = new List<MyClass>(); 
list.Add(new MyClass { of = "of1", order = "order1", qty = 1 }); 
list.Add(new MyClass { of = "of1", order = "order1", qty = 9 }); 
list.Add(new MyClass { of = "of2", order = "order1", qty = 30 }); 
list.Add(new MyClass { of = "of1", order = "order2", qty = 100 }); 

它應該返回

OF: of1, Order: order1, Qty: 10 
OF: of2, Order: order1, Qty: 30 
OF: of3, Order: order2, Qty: 100 

我有這個解決方案,但我不喜歡它

var sum = from p in list 
        group p by p.of+","+p.order 
        into g 
        select new MyClass 
          { 
           of = g.Key.Split(',')[0], 
           order = g.Key.Split(',')[1], 
           qty = g.Sum(p=>p.qty) 
          }; 

回答

2

你可以使用匿名類型爲你的關鍵:

var sum = from p in list 
        group p by new { Of = p.of, Order = p.order } 
        into g 
        select new MyClass 
          { 
           of = g.Key.Of, 
           order = g.Key.Order, 
           qty = g.Sum(p=>p.qty) 
          }; 
+0

就是這麼簡單:O型。謝謝你漂流 – muek 2010-10-25 18:54:34