2015-06-26 72 views
0

我經常發現自己正在執行以下操作以從對象列表中提取屬性,以創建聚合列表。這將如何與LINQ表達?如何從LINQ中提取多個對象的屬性

var totalErrors = 
    new Dictionary<string, string>(); 

foreach (var res in results) 
{ 
    foreach (var err in res.Errors) 
    { 
     totalErrors 
      .Add(err.Key, err.Value); 
    } 
} 

return totalErrors; 
+0

這既可以用一個包含支票,還是讓它拋出一個異常,如果它不應該發生的處理。 –

回答

2

可以使用SelectManyToDictionary方法:

var result = results 
    .SelectMany(x => x.Errors) // get all Errors in one sequence 
    .ToDictionary(x => x.Key, x => x.Value); // create new dictionary based on this Enumerable 

SelectMany()項目序列的每個元素到IEnumerable<T>和結果序列合併爲一個序列。並且ToDictionary()根據指定的密鑰選擇器函數從IEnumerable<T>創建Dictionary<TKey, TValue>

1

您可以在兩個層面上做一個聚合與SelectMany,像這樣:

var totalErrors = results 
    .SelectMany(r => r.Errors) 
    .ToDictionary(e => e.Key, e => e.Value); 

SelectMany「變平」集合的集合到一個單一的水平,此時你可以申請ToDictionary到扁平化列表。

0

可以使用的SelectMany:

var allErrors = Results.SelectMany(res=>res.Errors); 
//foreach(var error in allErrors)... 

var dictionary = allErrors.ToDictionary(x=>x.Key, x=> x.Value); 
相關問題