您好我想在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属性答案 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(...)
为您提供查询,而不是Request
或List<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);