【问题标题】:unable to update list using LINQ [duplicate]无法使用 LINQ 更新列表 [重复]
【发布时间】:2019-01-01 21:42:23
【问题描述】:

为什么无法使用 LINQ 根据条件更新项目值 这是我的代码:

class Program
{
    public static List<Items> items = new List<Items>();
    static void Main(string[] args)
    {


        // Add items to list
        for (int i = 65; i <= 70 ; i++)
        {
        var RowItem = new Items();
            RowItem.Code = i;
            RowItem.Char = (char)(i);
            items.Add(RowItem);
        }


        //Update item
        items
            .Where(s => s.Code == 70)
            .Select(s => { s.Char ='*' ; return s; })
            .ToList();

        Console.WriteLine("\n\n\n");
        foreach (var item in items)
        {
            Console.WriteLine("\t " + item.Code + " ----> " + item.Char);
        }

        Console.ReadKey(true);
    }
}

Item 类定义如下 项目类定义如下 Item 类定义如下Item类定义如下

public class Items
{
    public int Code { get; set; }
    public Char Char { get; set; }
}

【问题讨论】:

  • 似乎缺少一个作业。
  • items = items.Where...
  • 这是你的条件for (int i = 65; i &lt;= 70 ; i++),你正在做这样的事情.Where(s =&gt; s.Code == 700)。您的值在 65 到 70 之间
  • @Dani 认为 700 应该读作 70
  • 为什么这么多人认为使用所谓的语言集成查询技术更新是个好主意?不是,linq 不能用于更新。但是,您当然可以根据现有列表创建一个新列表。

标签: c#


【解决方案1】:
    //Update item
    items
        .Where(s => s.Code == 700)
        .Select(s => { s.Char ='*' ; return s; })
        .ToList();

你没有更新任何东西。您只需创建一个临时列表,然后丢弃结果,因为它没有分配给任何东西。

请注意,Items 是一种值类型,无法通过在 lambda 函数中修改它的本地副本来影响。

【讨论】:

  • (现在看到底部位,这是最重要的部分......)
猜你喜欢
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 2018-04-29
相关资源
最近更新 更多