无法使用 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 <= 70 ; i++)
,你正在做这样的事情.Where(s => 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) 方法 [重复]