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"}
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"}
あなたは本当に意味するものではありません - 理想的には、副作用があってはなりません。私はあなたを意味は行うことができます。
var results = Results.Where(r => r.id == id)
.Select(r => {
if (r.value == x)
{
r.result = "Found";
}
return r;
};
は、私は一般的に
など、このは本当には、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番目のパスを作成する方がよいでしょう。
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");
も同様の方法でこのような.Select(R =>新しいSomeObjectの(){ID = r.id、名前= r.name})などの新しいオブジェクトを作成しない含ま '副作用フリー' されることになります? – zsharp
@zsharp:それは既存のオブジェクトには影響しないので、大丈夫です。 –