我目前根据我的列表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查询?如果可能的话,我想避免使用嵌套循环。
答案 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();