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

您可以ForEach在 Linq中使用

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(...)给你一个查询,而不是 aRequest或 a List<Request>。如果FirstOrDefault()您想获得一个(或 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 回答
0

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

    listOfRequestAssigned.ForEach(x => x.RequestCompleted = x.RequestedNumber 
    == CurrentRequest);
于 2020-04-13T14:53:44.337 回答