根据列表和数量的存在求和属性

时间:2017-09-13 14:08:57

标签: c# linq sum

我目前根据我的列表SOURCEFIELDS中存在的NAME来总结我的对象的SIZE属性的值(参见代码)。

string[] SourceFields = MergeParameters
  .Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

int OverallLength = MainFields
  .FindAll(FO => SourceFields
     .Any(List => FO.Name.Equals(List)))
  .Sum(FO => FO.Size);

我的问题是,如果一个值出现在SOURCEFIELDS中两次(这是可能的),我需要将该值加倍(或者显示它的次数)。

这是否可以使用linq查询?如果可能的话,我想避免使用嵌套循环。

2 个答案:

答案 0 :(得分:2)

您可以使用Join扩展方法:

int OverallLength = MainFields.Join(SourceFields, x => x.Name, y => y,
    (x, y) => x).Sum(x => x.Size);

顺便说一下,最好拨打SourceFields.Contains(FO.Name)而不是SourceFields.Any(List => FO.Name.Equals(List))

答案 1 :(得分:0)

string[] SourceFields = MergeParameters.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
    int overallLength = MainFields.Select(mf => SourceFields.Count(sf => sf == mf.Text) * mf.Size).Sum();