C# 如何使用LINQ更新列表中的项目

C# 如何使用LINQ更新列表中的项目,c#,linq,C#,Linq,我有一张单子 我需要修改列表中的单行项 List.Where(x => x.Amount>0).OrderBy(x => x.Id).ToList() .ForEach(x => x.Amount = x.Amount + (item1- item2)); 上面的代码适用于多行,但我希望使用条件选择列表的第一行,并仅更新或修改第一行项目值 谢谢你的意思是这样的吗 List.Where(x => x.Amount>0).OrderBy(x => x.Id

我有一张单子

我需要修改列表中的单行项

List.Where(x => x.Amount>0).OrderBy(x => x.Id).ToList()
.ForEach(x => x.Amount = x.Amount + (item1- item2));
上面的代码适用于多行,但我希望使用条件选择列表的第一行,并仅更新或修改第一行项目值


谢谢你的意思是这样的吗

List.Where(x => x.Amount>0).OrderBy(x => x.Id).FirstOrDefault()?.Amount += (item1- item2);
因此,您可以使用FirstOrDefault扩展方法,如下所示:

var item = List.FirstOrDefault(x => x.Amount > 0);
if (item != null) 
{
    item.Amount += item1- item2;
}

旁注:情况有点奇怪。每次执行查询时,返回的第一行可能不同。

可能重复try first而不是try firstWhere@Lucifer不我的问题是不同你的情况有点奇怪你如何通过选择first来决定应该更新哪个Id的数量你将只更新列表中第一个元素的值它不是你的问题对我来说似乎是一样的你想更新列表中一个元素的属性请记住,如果有列表中没有金额大于0的项目…@PawanLakhara您现在可以试试吗?谢谢,我正在使用列表。其中x=>x.Amount>0.OrderByx=>x.Id.FirstOrDefault.Amount+=item1-item2;此代码不应编译,因为如果结果为null,则可能会得到以下结果=>null+=item1-item2;。编译器会因为这类事情对你大喊大叫。在我的案例列表中,至少有一条记录有金额。最佳答案,尽管原始问题包含一个OrderBy-如果OP想要编辑最早/最新的订单,只需要添加这一条,最好知道您想要的ID并将其包含在筛选器中really@PawanLakhara你说这个“不创建对象”没有用处是什么意思?更高的精度使我们在更好的解决方案中前进。@CodeNotFound我的意思是这个创建新对象对我没有用处。没有。你错了。它引用列表中的同一对象。你自己检查一下就行了==