我有1个对象列表,我想要过滤以填充另一个不同对象的列表。
在名为“SelectedAssets”的第一个列表中,我有两个我感兴趣的属性。属性的名称是“AdminOperator”,“Identifier”它们都是类型字符串。
目标是使用属性“Name”(类型字符串)和“TotalSystems”(类型为int)填充名为“SystemsPerPlatform”的第二个列表。
所以我想计算每个“AdminOperator”在名为“SelectedAssets”的第一个列表中的“Identifier”数,然后将结果填充到名为“SystemsPerPlatform”的第二个列表中。第二个列表中的结果应该类似于 Name =“SomeUniqueName1”,TotalSystems = 300 Name =“SomeUniqueName2”,TotalSystems = 200
依旧...... 名称不得重复,每个名称应具有相应的TotalSystems计数,这些计数引用他们名字中的每个“标识符”。
到目前为止,我做到了:
SystemsPerPlatform.Clear();
var results = SelectedAssets.GroupBy(a => a.AdminOperator)
.Select(y => new PlatformStats { Name = y.Key, TotalSystems = y.Sum(x => x.Identifier.Count())})
.ToList();
results.ForEach(x=>
{
SystemsPerPlatform.Add(x);
});
但这不起作用,x.Identifier.Count()正在计算字符数,而不是每个Name = y.Key与之关联的每个实例。
你能帮忙吗?
答案 0 :(得分:1)
这应该有效:
var assets = SelectedAssets.GroupBy(a => a.AdminOperator)
.Select
(
g => new PlatformStats()
{
Name = g.Key,
TotalSystems = g.Count()
}
).OrderByDescending(g => g.TotalSystems)
.Take(30);
foreach (var asset in assets)
{
SystemsPerPlatform.Add(asset);
}