conditional使用LINQ更新列表

我有一份清单

List li = new List(); 

Myclass在哪里

 class Myclass { public string name {get;set;} public decimal age {get;set;} } 

李中的物品看起来像

在此处输入图像描述

  i want to update `li` according to name but with `LINQ` like li.where(w=> w.name = "di") = li.Where(w => w.name =="di").select(s => {s.age = 10;return s;}).Tolist(); li.where(w=> w.name = "marks") = li.Where(w => w.name =="marks").select(s => {s.age = 20;return s;}).Tolist(); li.where(w=> w.name = "grade") = li.Where(w => w.name =="grade").select(s => {s.age = 10;return s;}).Tolist(); 

并希望看起来像这样的结果

在此处输入图像描述

我的代码给出错误,请你告诉我怎么做

更清洁的方法是使用foreach

 foreach(var item in li.Where(w => w.name =="di")) { item.age=10; } 

你需要:

 li.Where(w=> w.name == "di").ToList().ForEach(i => i.age = 10); 

程序代码:

 namespace Test { class Program { class Myclass { public string name { get; set; } public decimal age { get; set; } } static void Main(string[] args) { var list = new List { new Myclass{name = "di", age = 0}, new Myclass{name = "marks", age = 0}, new Myclass{name = "grade", age = 0}}; list.Where(w=> w.name == "di").ToList().ForEach(i => i.age = 10); list.ForEach(i => Console.WriteLine(i.name + ":" + i.age)); } } } 

输出:

  di:10 marks:0 grade:0 
  li.Where(w => w.name == "di" ) .Select(s => { s.age = 10; return s; }) .ToList(); 

如果你真的想使用linq,你可以做这样的事情

 li= (from tl in li select new Myclass { name = tl.name, age = (tl.name == "di" ? 10 : (tl.name == "marks" ? 20 : 30)) }).ToList(); 

要么

 li = li.Select(ex => new MyClass { name = ex.name, age = (ex.name == "di" ? 10 : (ex.name == "marks" ? 20 : 30)) }).ToList(); 

这假定只有3种类型的name 。 我会将该部分外部化为一个函数,使其更易于管理。

尝试并行更长的列表:

 Parallel.ForEach(li.Where(f => f.name == "di"), l => l.age = 10); 

试试这个:

 li.ForEach(x => x.age = (x.name == "di") ? 10 : (x.name == "marks") ? 20 : (x.name == "grade") ? 30 : 0 ); 

所有值都在一行代码中更新,您只能一次浏览列表。 您还可以设置默认值。

怎么样

 (from k in myList where k.id > 35 select k).ToList().ForEach(k => k.Name = "Banana");