2015-11-18 80 views
1

假設我有兩個(可能更多)具有相同字段/屬性的相同對象的列表。 每個列表表示相同的對象迭代列表和總結並將結果放入字典

Proerpties:

HoursWorked 
HoursRate 

我想利用迭代,並採取每個字段的總和從所有列表(可以是2,3,或等等),並將其存儲在具有關鍵值對的字典中。 e.g HoursWorked:2 and HourseRate:6

當前,我只能做到只有一個字段(硬編碼)。我想使它通用,所以我可以填寫所有字段的鍵/值字典。

我定義我的字典如下

public Dictionary<string, double> TotalCount { get; set; } 

LINQ查詢:

Dictionary<string, double> totalCount = records 
.GroupBy(x => records) 
.ToDictionary(x => Convert.ToString("HoursWorked"), x => x.Where(y => y.HoursWorked != null).Sum(y => y.HoursWorked).Value); 

任何幫助?

樣本數據

Input 
    report = 
    { 
    [HoursWorked: 1.0, HoursRate:10], 
    [HoursWork:2.0, HoursRate:15] 
    } 

Expected Output 
Dictioary = {Key:HoursWorked Value: 3.0,Key:HoursRate Value:25} 
+0

你想讓「HoursWorked」和「HoursRate」成爲你的字典鍵嗎? –

+0

是的,我想要的是 – immirza

+0

樣品數據和預期結果請。 –

回答

-1
class someObject 
    { 
     public int workingHours { get; set; } 
     public int hourRate { get; set; } 
    } 

您可以從列表中的所有公共列表。

List<SomeObject> lst = new List<SomeObject>(); 
lst.AddRange(Oldlst1); 
lst.AddRange(Oldlst2); 

然後您可以根據小時率進行分組。

var n = lst.GroupBy(x=>x.hourRate); 

然後你可以創建一個字典。

var m=n.ToDictionary(x=>x.Key, x=>x.Sum(y=>y.workingHours)); 

這裏在m你會得到hourRate和價值,你會得到工作小時的總和。

0
Dictionary<string, double> dictionary = new[] { "HoursWorked", "HoursRate" } 
    .ToDictionary(k => k, v => collections 
     .SelectMany(x => x) 
     .Sum(y => (double)y.GetType().GetProperty(v).GetValue(y))); 

其中'集合'是您的列表集合。 顯然完全類型不安全,並會很容易跌倒!

我會爭辯說,與使用反射相比,更好的模式是編寫一個方法或接口,該方法或接口將返回給定字符串鍵的正確的double值。