这可能是一个愚蠢的问题,但我总是使用linq来选择项目。
但我想知道是否可以使用其关键字执行以下简单任务。
List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
if(OI.TYPE == "P")
OI.TYPE = "Project";
else
OI.TYPE = "Support";
答案 0 :(得分:6)
您可以使用List类的ForEach方法。
ordersList.ForEach(oi => oi.TYPE = oi.TYPE == "P" ? "Project" : "Support" );
如果你想在IEnumerable类型中使用ForEach方法,你可以创建自己的ForEach扩展
public static void ForEach<T>(this IEnumerable<T> en, Action<T> action)
{
foreach(T item in en)
{
action(item);
}
}
答案 1 :(得分:4)
不,LINQ(Language-Integrated Query)是一种查询语言,它确实在consise 查询定义中闪耀,但并不总是很好(速度和/或内存)问题)。
如果您想修改收藏品,请按照您已经这样做的方式继续。
答案 2 :(得分:1)
LINQ用于查询集合,对于修改,您当前的循环更具可读性和更好的方法,但如果您想要LINQ选项,那么:
如果OrderInfo
是一个类(引用类型),那么您可以修改对象的属性,(不能将它们指定为null或新引用)。
var ordersList = new List<OrdersInfo>();
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
答案 3 :(得分:1)
ForEach不是Linq解决方案,但它看起来像是:
ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support");
可在List<T>
个实例上使用,而不是IEnumerable<T>
。