2010-12-13 1 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

答えて

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

+0

ええ、ごめんなさい。私はIEnumerable の拡張メソッドを作成してリストのForEachを模倣したことを思い出しました Squirrelsama

0

新しいリストの作成は冗長です。リスト全体を繰り返し、各アイテムを変更して、変更されたアイテムを新しいリストに追加します。したがって、新しいリストは古いリストと同一です。

+0

構造体の場合、コードはコンパイルされません。 – SLaks

+0

@ SLAKs:それを指摘してくれてありがとう。改正された。 –