2010-12-13 46 views
0

有人可以幫我轉換成LINQ嗎?任何幫助/提示讚賞...轉換IF到LINQ

IList<DestinationSummary> list = 
    _invoiceReportDao.InvoiceDestinationSummary(filter); 

IList<DestinationSummary> updatedList = 
    new List<DestinationSummary>(); 

foreach (DestinationSummary item in list) 
{ 
    if (item.ChargeCategoryDiscriminator == "INT") 
     item.ChargeCategoryDiscriminator = "00%"; 

    if (item.ChargeCategoryDiscriminator == "UK") 
     item.ChargeCategoryDiscriminator = "07%"; 

    updatedList.Add(item); 
} 

return updatedList; 
+2

爲什麼你在第一個地方單獨列出? – SLaks 2010-12-13 16:54:45

回答

5

LINQ不應該用來修改對象。

你的代碼是好的。
但是,您可以通過初始化新的列表形成舊讓它更快一點:

IList<DestinationSummary> list = _invoiceReportDao.InvoiceDestinationSummary(filter); 
IList<DestinationSummary> updatedList = new List<DestinationSummary>(list); 

foreach (DestinationSummary item in updatedList) 
{ 
    if (item.ChargeCategoryDiscriminator == "INT") 
     item.ChargeCategoryDiscriminator = "00%"; 

    if (item.ChargeCategoryDiscriminator == "UK") 
     item.ChargeCategoryDiscriminator = "07%"; 
} 
0
list.Where(i => i.ChargeCategoryDiscriminator == "INT") 
    .ForEach(i => i.ChargeCategoryDiscriminator ="00%"); 
list.Where(i => i.ChargeCategoryDiscriminator == "UK") 
    .ForEach(i => i.ChargeCategoryDiscriminator ="07%"); 

此外,加入這些項目updatedList是多餘的。更改是list

+0

這不會編譯。 – SLaks 2010-12-13 17:11:18

+0

對,對不起。我只記得我爲IEnumerable 做了一個擴展方法,它模仿了ForEach的一個列表 Squirrelsama 2010-12-14 21:53:58

0

創建新列表是多餘的。您正在迭代列表,修改每個項目,然後將修改後的項目添加到新列表中。新列表因此與舊列表相同。

+0

如果它是一個結構,他的代碼將不會編譯。 – SLaks 2010-12-13 17:11:34

+0

@SLaks:謝謝你指出。修訂。 – 2010-12-13 17:26:31