Linq查询每个值计算属性

时间:2017-01-05 20:44:47

标签: c# linq

我有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与之关联的每个实例。

你能帮忙吗?

1 个答案:

答案 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);
 }