假设我有两个(可能更多)具有相同字段/属性的相同对象的列表。 每个列表代表相同的对象
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 :(得分: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)));
其中&#39;集合&#39;是你的列表集合。 显然完全不安全,很容易摔倒!
我认为,与使用反射相比,更好的模式是编写一个方法或接口,在给定字符串键的情况下返回正确的double值。
答案 1 :(得分:-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));
在这里,你将获得hourRate,并且你将获得工作时间的总和。