无法使用 LINQ 更新列表 [重复]

Posted

技术标签:

【中文标题】无法使用 LINQ 更新列表 [重复]【英文标题】:unable to update list using LINQ [duplicate] 【发布时间】: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 不能用于更新。但是,您当然可以根据现有列表创建一个新列表。 【参考方案1】:
    //Update item
    items
        .Where(s => s.Code == 700)
        .Select(s =>  s.Char ='*' ; return s; )
        .ToList();

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

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

【讨论】:

(现在看到底部位,这是最重要的部分......)

以上是关于无法使用 LINQ 更新列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

异步方法运行速度太快,无法在主线程上更新我的列表框 [重复]

Message LINQ to Entities 无法识别 System.Object Get(Int32, Int32) 方法 [重复]

两个List属性,无法使用LINQ创建列表

方法无法转换为存储表达式(LINQ)[重复]

如何使用从图库中选择的新图像更新列表视图 [重复]

c#,LINQ to Entities 无法识别方法'Int32 [重复]