是否可以使用LINQ进行列表操作?

这可能是一个愚蠢的问题,但我总是使用linq来选择项目。

但我想知道是否可以使用其关键字执行以下简单任务。

List ordersList . . . foreach(OrdersInfo OI in ordersList) if(OI.TYPE == "P") OI.TYPE = "Project"; else OI.TYPE = "Support"; 

不, LINQ(语言集成查询)是一种查询语言,它确实在简洁的查询定义中闪耀,但并不总是那么好(速度和/或内存问题)。

如果您想修改collections,请按照您已经这样做的方式进行。

您可以使用List类的ForEach方法。

 ordersList.ForEach(oi => oi.TYPE = oi.TYPE == "P" ? "Project" : "Support" ); 

如果你想在IEnumerable类型中使用ForEach方法,你可以创建自己的ForEach扩展

 public static void ForEach(this IEnumerable en, Action action) { foreach(T item in en) { action(item); } } 

LINQ用于查询集合,对于修改,您当前的循环更具可读性和更好的方法,但如果您想要LINQ选项,那么:

如果OrderInfo是一个类(引用类型),那么您可以修改对象的属性,(您不能将它们指定为null或新引用)。

 var ordersList = new List(); ordersList.Add(new OrdersInfo() { TYPE = "P" }); ordersList.Add(new OrdersInfo() { TYPE = "S" }); ordersList.Add(new OrdersInfo() { TYPE = "P" }); ordersList.Select(r => (r.TYPE == "P" ? r.TYPE = "Project" : r.TYPE = "Support")).ToList(); 

将您的类定义为:

 class OrdersInfo { public string TYPE { get; set; } } 

这是截图 在此处输入图像描述

有趣的是,我没有将结果分配回ordersList

ForEach不是Linq解决方案,但它看起来像是:

 ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support"); 

List实例上可用,而不是在IEnumerable