J'avais une liste
List<Myclass> li = new List<Myclass>();
où est Myclass
class Myclass
{
public string name {get;set;}
public decimal age {get;set;}
}
articles en li ressemble
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();
et veulent résultat qui ressemble à ceci
mon code donne une erreur pouvez-vous s'il vous plaît dire comment je fais cela
plus propre moyen de le faire utilise foreach
foreach(var item in li.Where(w => w.name =="di"))
{
item.age=10;
}
Vous avez besoin:
li.Where(w=> w.name == "di").ToList().ForEach(i => i.age = 10);
Code du programme:
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<Myclass> { 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));
}
}
}
Sortie:
di:10
marks:0
grade:0
li.Where(w => w.name == "di" )
.Select(s => { s.age = 10; return s; })
.ToList();
Si vous voulez vraiment utiliser linq, vous pouvez faire quelque chose comme ceci
li= (from tl in li
select new Myclass
{
name = tl.name,
age = (tl.name == "di" ? 10 : (tl.name == "marks" ? 20 : 30))
}).ToList();
ou
li = li.Select(ex => new MyClass { name = ex.name, age = (ex.name == "di" ? 10 : (ex.name == "marks" ? 20 : 30)) }).ToList();
Cela suppose qu’il n’ya que 3 types de name
. J'externaliserais cette partie dans une fonction pour la rendre plus facile à gérer.
Essaye ça:
li.ForEach(x => x.age = (x.name == "di") ?
10 : (x.name == "marks") ?
20 : (x.name == "grade") ?
30 : 0 );
Toutes les valeurs sont mises à jour dans une ligne de code et vous parcourez la liste une seule fois. Vous avez également le moyen de définir une valeur par défaut.
Essayez Parallel pour les listes plus longues:
Parallel.ForEach(li.Where(f => f.name == "di"), l => l.age = 10);
Que diriez-vous
(from k in myList
where k.id > 35
select k).ToList().ForEach(k => k.Name = "Banana");