2016-11-09 10 views
0

このforeachをlinqに変換する方法??? MyReport.Elementsは5つの要素で構成されています。foreachをlinqクエリまたはラムダ式に変換する方法

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はクエリであり、データを取得するために使用する必要があります。データを変更することはできません。あなたの条件を満たす述語を持つLastを呼び出すことはできますが、このケースではforeachを使用しても問題ありません。 – CrudaLilium

答えて

1

あなたの例では、限りマッチがあるとして割り当てていきます。右ここでREPL例/ライブ

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

https://repl.it/ETVT/2

+0

いいえ、私は最初に、またはデフォルトのマッチを望んでいません.. MyReport.Elementsに5つ以上の要素があり、正確な "キャプション"の一致が必要です – surya

+0

これは完全に一致しています。私はすべての試合で重要なのかどうか尋ねています。レポートデータセットに複数の完全一致が含まれている可能性がありますか?そうでない場合、または気にしない場合、これは素晴らしいです。 – clarkitect

+0

はい。私のレポートデータセットには複数の一致が含まれているため、everymatchに再割り当てする必要があります。 – surya

関連する問題