2

こんにちは、where 句の特定の条件に一致するオブジェクトのリストに値を設定したいのですが、可能ですか? その他の回避策として、where 句を使用してオブジェクトのリストを取得し、for または foreach ループを使用して繰り返し、値を更新します。

listOfRequestAssigned.Where(x => x.RequestedNumber == CurrentRequest);

オブジェクトのリスト listOfRequestAssigned があり、検索条件に一致するオブジェクトのプロパティを更新したいと考えています。

class Request
 {
 bool _requestCompleted;
   int _requestedNumber;
     public int RequestedNumber 
    {
        get { return _requestedNumber; }
        set { _requestedNumber = value; }
    }
    public bool RequestCompleted
    {
        get { return _requestCompleted; }
        set { _requestCompleted = value; }
    }
 }

Linq を使用して、条件に一致するすべてのオブジェクトの RequestCompleted プロパティを更新したい

4

4 に答える 4

8

ForEachLinqで使用できます

listOfRequestAssigned.Where(x => x.RequestedNumber == CurrentRequest).ToList().ForEach(x => x.RequestCompleted = true);

複数の更新を行う場合は、

listOfRequestAssigned.Where(x => x.RequestedNumber == CurrentRequest).ToList().ForEach(x =>  { x.RequestCompleted = true; x.OtherProperty = value; } );

Where(...)Requestやではなく、クエリを返しますList<Request>FirstOrDefault()1 つ (または 0) の結果が必要な場合、またはを使用ToList()できる結果のリストが必要な場合に使用しますForEach()

于 2013-03-29T09:55:13.017 に答える
2

一般に、Linq はクエリであり、更新ツールではありませんが、以下を使用できますforeach

var currentRequests =  listOfRequestAssigned
    .Where(x => x.RequestedNumber == CurrentRequest);
foreach(var req in currentRequests)
{
    req.RequestCompleted = true;
}
于 2013-03-29T09:50:23.020 に答える
1

List 型の特定のコレクションがあるため、ForEach と条件付きセットを使用できます。

listOfRequestAssigned.Foreach(x => { if (x.RequestedNumber == CurrentRequest) x.RequestCompleted = true;}});

より一般的なコレクション IEnumerable がある場合は、Linq で Select を使用して、必要に応じてプロパティが設定されるプロジェクションを作成できます (元のコレクションは変更されません!)。

listOfRequestAssigned
.Where(x => x.RequestedNumber == CurrentRequest)
.Select(x => { x.RequestCompleted = true; return x; })
于 2015-01-23T16:21:43.240 に答える