2009-09-02 16 views
0

linqメソッド内の条件に基づいて新しい値を代入しますが、すべての結果を保持するにはどうすればよいですか?LinqからSQLメソッドへの条件付き代入

int x= 100; 

var results= from r in Results where r.id==id select r 
       { if r.value==x set r.result="Found"} 

答えて

2

あなたは本当に意味するものではありません - 理想的には、副作用があってはなりません。私はあなたを意味行うことができます。

var results = Results.Where(r => r.id == id) 
        .Select(r => { 
          if (r.value == x) 
          { 
           r.result = "Found"; 
          } 
          return r; 
         }; 

は、私は一般的に

+0

も同様の方法でこのような.Select(R =>新しいSomeObjectの(){ID = r.id、名前= r.name})などの新しいオブジェクトを作成しない含ま '副作用フリー' されることになります? – zsharp

+0

@zsharp:それは既存のオブジェクトには影響しないので、大丈夫です。 –

1

など、このは本当には、SQLにLINQに動作しないことしかし...

は注意しないようにしようと思いますLinqはそのように使用すべきではありません。私は、クエリの結果を繰り返し、それらを変更します。

var results= from r in Results where r.id==id select r; 

foreach (var r in results.ToList()) { if (r.value==x) r.result="Found"; } 
2

クエリをきれいにし、副作用のないようにするには、2番目のパスを作成する方がよいでしょう。

int x = 100; 

List<Result> results = (from r in Results 
         where r.id == id 
         select r).ToList(); 

results.ForEach(r => r.result = r.value == x ? "Found" : "Not Found");