2016-11-09 117 views
0

如何將此foreach轉換爲linq? MyReport.Elements由5個元素組成。如何將foreach轉換爲linq查詢或lambda表達式

foreach(var i in MyReport.Elements) 
{ 
     if(i.caption == table.caption) 
     { 
     newName = i.uname; 
     } 
} 

我已經厭倦了將它轉換爲linq,但它沒有解決。

newName = MyReport.Elements.ForEach(i => i.caption.Equals(table.caption)? i.uname : null); 
+1

請告訴我分配'了newName點'如果它會被覆蓋? –

+0

LINQ是查詢,你應該用它來獲取數據,而不是修改數據。在這種情況下使用foreach是很好的,儘管你可以用滿足條件的謂詞來調用Last。 – CrudaLilium

回答

1

只要有匹配,您的示例將繼續分配。正因爲如此,實際上你給的範圍內唯一重要的一個是最後精確匹配:在這裏

// C# 6 
newName = MyReport.Elements.Where(x => x.caption == table.caption).LastOrDefault()?.uname; 

直播/ REPL例如:https://repl.it/ETVT/2

+0

不,我不想第一個或默認的比賽。還有在MyReport.Elements超過5元,我想確切的「標題」比賽 – surya

+0

這是完全匹配的。我在問每個比賽是否重新分配都很重要。您的報告數據集是否可以包含多個完全匹配?如果沒有,或者如果你不在乎,那麼這很好。 – clarkitect

+0

Yes..my報表數據集包含一個以上的比賽,所以我需要在everymatch重新分配。 – surya