6

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

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

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

4 回答 4

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);
    }
}
于 2013-04-24T12:22:45.140 回答
4

不,LINQ(语言集成查询)是一种查询语言,它确实在简洁的查询定义方面大放异彩,但在这方面并不总是很好(速度和/或内存问题)。

如果您想修改集合,请保持您已经这样做的方式。

于 2013-04-24T11:56:33.277 回答
1

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

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

List<T>仅在instance 上可用,在IEnumerable<T>.

于 2013-04-24T12:24:44.273 回答
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

于 2013-04-24T12:00:20.380 回答