使用linq设置列表值

时间:2013-03-29 09:46:29

标签: linq class c#-3.0

您好我想在where子句中设置与给定条件匹配的对象列表中的值。是否可能? 其他解决方法是使用where子句获取对象列表,然后使用for或fore循环迭代并更新值。

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

我有列表listOfRequestAssigned of objects,想要更新符合我搜索条件的对象的某些属性。

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 个答案:

答案 0 :(得分:7)

您可以在Linq中使用ForEach

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(...)为您提供查询,而不是RequestList<Request>。如果您想获得一个(或0)结果,请使用FirstOrDefault();如果您想要使用ToList()的结果列表,请使用ForEach()

答案 1 :(得分:1)

一般来说,Linq是一个查询 - 不是更新工具,但您可以使用foreach

var currentRequests =  listOfRequestAssigned
    .Where(x => x.RequestedNumber == CurrentRequest);
foreach(var req in currentRequests)
{
    req.RequestCompleted = true;
}

答案 2 :(得分:0)

由于您具有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; })

答案 3 :(得分:0)

您可以通过比较时间来分配布尔值。这是布尔属性最简单,最聪明的方法。

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