这可能是一个愚蠢的问题,但我一直使用LINQ来选择项目。是否可以使用LINQ进行列表操作?
但我想知道是否有可能使用其关键字完成以下简单任务。
List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
if(OI.TYPE == "P")
OI.TYPE = "Project";
else
OI.TYPE = "Support";
这可能是一个愚蠢的问题,但我一直使用LINQ来选择项目。是否可以使用LINQ进行列表操作?
但我想知道是否有可能使用其关键字完成以下简单任务。
List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
if(OI.TYPE == "P")
OI.TYPE = "Project";
else
OI.TYPE = "Support";
没有,LINQ(Language-Integrated Query)是查询语言,它真正的亮点在consise 查询定义,但在这并不总是好的太(速度和/或内存问题)。
如果你想修改集合,保持你已经这样做的方式。
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
你可以使用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);
}
}
ForEach不是LINQ的解决方案,但它看起来是:
ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support");
可用ony List<T>
实例,而不是IEnumerable<T>
。
对不起,我没有看到你的答案 – binard 2013-04-24 12:28:04
我们同时发帖,而且我们这里帮忙,不要竞争:) – 2013-04-24 12:29:16
我不明白重复的OI。TYPE – AngelicCore 2013-04-24 12:32:20
LINQ意味着无突变。如果你想操纵,使用'foreach'。 – Jon 2013-04-24 11:56:46
谢谢大家 – AngelicCore 2013-04-24 12:12:22