2011-01-27 17 views
1

私は2つのコレクションを持っています。 1つはID(int)とIsIDValid(bool)変数を持ちます。その他のコレクションにはID(int)があります。 IDが2番目のコレクションに存在する場合、最初のコレクションのIsIDValidプロパティをtrueに更新したいとします。Linqクエリを使用した更新

EDIT:回答ありがとうございます。私はforeachループを使用せずに何とかそれを行うことはできますか?

+0

foreach:いいえ、常に少なくとも1回は最初のコレクションを反復処理する必要があります。これらの答えはすべて一度だけ行います。あなたは何を避けることを望んでいますか? – Rup

+0

これを避ける唯一の方法は、LINQクエリラムダの1つの要素を変更するハックです。良いスタイルは、コレクションを不変として扱い、LINQなしで結果を変更することです。 – Grozz

答えて

1

シンプル:

var validIds = new HashSet<int>(other.Select(x => x.Id)); 
var query = firstCollection.Where(x => validIds.Contains(x.Id)); 
foreach (var item in query) 
{ 
    item.IsIdValid = true; 
} 
0

これは動作します:

var valid = firstCollection.Where(f=> secondCollection.Any(s=> s.ID == f.ID)); 
foreach (var v in valid) { v.IsValid = true; } 
0

This SO answerは、LINQを使用して複数行の更新に関する詳細な情報を持っています。 Jonの線に沿って

0

、あなたはまた、LINQの

あなたはLINQの2つのセットをマージするのではなく、明示的にHashSetのあなた自身を構築するための戦略を選んだせている以外、基本的に同じものである
var query = firstCollection.Join(other, fc => fc.Id, o => o.Id, (fc, o) => fc); 
foreach (var item in query) 
{ 
    item.IsIdValid = true; 
} 

に参加し使用することができます。私はカバーの下でより効率的であるかどうか分かっていないが、私は結合が少なくとも良いと思った。

関連する問題