2013-04-24 78 views
6

这可能是一个愚蠢的问题,但我一直使用LINQ来选择项目。是否可以使用LINQ进行列表操作?

但我想知道是否有可能使用其关键字完成以下简单任务。

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

LINQ意味着无突变。如果你想操纵,使用'foreach'。 – Jon 2013-04-24 11:56:46

+0

谢谢大家 – AngelicCore 2013-04-24 12:12:22

回答

4

没有,LINQ(Language-Integrated Query)查询语言,它真正的亮点在consise 查询定义,但在这并不总是好的太(速度和/或内存问题)。

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

+0

Tigran,我同意你答案的大部分内容,但你可以使用LINQ修改列表。 (虽然不应该) – Habib 2013-04-24 12:05:25

+0

+1,唯一的答案是“不要”。 – user7116 2013-04-24 12:53:50

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; } 
} 

下面是截图 enter image description here

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

+0

如果downvoter可以指出错误,会很高兴 – Habib 2013-04-24 12:06:41

+0

不确定一个语法错误,可能错误是显示某人如何使用LINQ来执行此操作? – user7116 2013-04-24 12:53:20

+0

@sixlettervariables,合成它的正确,我实际上在VS中测试它。我同意不应该通过LINQ来完成,而且我在答案的开头也有这个,但是因为显示它是否可能而被低估了......嗯。那对我来说是新的:) – Habib 2013-04-24 12:56:07

6

你可以使用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

ForEach不是LINQ的解决方案,但它看起来是:

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

可用ony List<T>实例,而不是IEnumerable<T>

+0

对不起,我没有看到你的答案 – binard 2013-04-24 12:28:04

+0

我们同时发帖,而且我们这里帮忙,不要竞争:) – 2013-04-24 12:29:16

+0

我不明白重复的OI。TYPE – AngelicCore 2013-04-24 12:32:20

相关问题