是否可以使用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
。