将IF转换为LINQ

时间:2010-12-13 16:51:49

标签: c# .net linq

有人可以帮我转换成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;

3 个答案:

答案 0 :(得分: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%";
}

答案 1 :(得分: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进行了更改。

答案 2 :(得分:0)

创建新列表是多余的。您正在遍历列表,修改每个项目,然后将修改的项目添加到新列表。因此,新列表与旧列表相同。