2011-06-30 1 views
0

「アクティブ」プロパティが1つのアイテムにのみ1に、他のすべてのアイテムに0に設定したいリストがあります。LINQで相互に除外するプロパティ

Linqでこれを行う最もスマートな方法はどれですか?私は0に設定することができます知っているすべてのアイテムを1つだけ現在の、しかし、私はそれを行うより良い方法があるかどうか尋ねていた。

ありがとうございます!チャオ

+0

どのアイテムが1を取得するかを決定するために使用する述語がありますか? – n8wrl

答えて

1

ダニエルの応答に対して、でなければなりません。それはちょうど倒錯です。少なくともそれを使ってアイテムを見つけ、それに基づいて行動してください。リストの性質に応じてFirstSingleまたはSingleOrDefault

var item = list.FirstOrDefault**(i => i == desired); 

if (item != null) 
{ 
    item.Active = true; 
} 

**可能性のある変更。

+0

注意:これは他のすべてを偽に設定するものではありません! 'desired'の値を変えてこのコードを2回実行すると、2つのアクティブなアイテムが表示されます。 –

+0

@Danielあなたは正しいです!本当に答えとしてマークしてはいけません。 – Shibumi

4

私は... LINQは、ここに特に有用であることがよく分からない方法について:

foreach (var item in list) 
{ 
    item.Active = (item == desiredActiveItem ? 1 : 0); 
} 
+0

+1私が書いたことは右でもなかったからです。 – Shibumi

2

私はジョンに同意していますが、とにかくLINQを使用したい場合、あなたはこのような何かを行うことができます:

list = list.Select(i => { i.Active = (i == desiredActiveItem ? 1 : 0); 
          return i; }).ToList(); 

これは、ここでLINQを使用しないことをお勧めします。

関連する問題