2017-09-13 43 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();