2013-11-02 99 views
1

我想從微軟網站上學習lambda表達式,我試圖將它應用到我創建的場景中以更深入地瞭解該網站試圖展示的內容。我偶然發現了與linq和lambda關聯的聚合函數。請告訴我正在嘗試實現什麼是正確的語法。基本上,我有一個稱爲物品的類,它有3個屬性:類別,ID和重量。一個類別可以有多個與之關聯的ID,我正在考慮獲得類別的總權重,該類別是每個具有我指定類別的ID的所有單個權重的總和。 更具體地說,這是我的結構的提取物:帶聚合函數的lambda表達式

class item 
    { 
     public int NodeID 
     { get; set; } 
     public int Weight 
     { get; set; } 
     public int Category 
     { get; set; } 
    } 

我有以下的解釋:

Dictionary<int,item> _itemsReceivedList=new Dictionary<int,item>(); 

而這正是我試圖讓C類的總重量:

_itemsReceivedList.Select(x=>x.Value.Category==c) 
.Sum(what should I put here for the predicate?) 

我想總結每個具有類別c的項目的權重。 請指教。謝謝!

+2

['Select'(HTTP:// MSDN。 microsoft.com/en-us/library/bb548891%28v=vs.110%29.aspx)不會過濾。它將這些元素投射到別的東西上。在這裏你將元素投影到布爾中。使用['Where'](http://msdn.microsoft.com/zh-cn/library/bb534803%28v=vs.110%29.aspx)進行過濾。 – pescolino

回答

3
var sum = _itemsReceivedList 
      .Where(x=>x.Value.Category==c) 
      .Sum(x=>x.Value.Weight); 
+0

謝謝大家閃電般的快速回應。我試過這個,但這是我得到的錯誤:錯誤'bool'沒有包含'Weight'的定義,也沒有擴展方法'Weight'接受類型'bool'的第一個參數你是否缺少using指令或程序集引用?) – user1205746

+0

上一條語句中的'x'仍然是一個KeyValuePair。 – Sam

+0

@ user1205746我更新了答案。 –

2

寫這

_itemsReceivedList.Where(x=>x.Value.Category==c).Sum(x => x.Weight); 
+1

這是錯誤的:帶有布爾表達式的'Select'返回'IEnumerable '。 – pescolino

+0

這是很常見的錯誤。你很困惑.Select()與.Where() –

3
int weight = _itemsReceivedList.Where(x => x.Value.Category == c) 
           .Select(s => s.Value) 
           .Sum(item => item.Weight); 

我認爲c聲明別的地方爲int

ScreenPrint

+0

是的,山姆。 c是整數,但我得到這個:錯誤'布爾'不包含'重量'的定義和沒有擴展方法'重量'接受類型'布爾'的第一個參數可以找到(你是否缺少using指令或者一個程序集引用?) – user1205746

+1

這工作時,我只是測試它..我會上傳一個截圖 – Sam