2013-04-24 87 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

相關問題