2017-09-13 52 views
2

我正在根据我的列表SOURCEFIELDS(参见代码)中名称的存在来总结我的对象的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

您可以使用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))

+0

完美!谢谢! – KnightsOfTheRoun

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();