Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

update multiple elements at once LINQ

Tags:

c#

linq

Is it possible to set property on each element from List using LINQ.

for example:

var users = from u in context.Users where u.Name == "George" select u;  foreach (User us in users){    us.MyProp = false; } 

Is it possible to make it cleaner ?

like image 604
gruber Avatar asked Mar 02 '11 09:03

gruber


2 Answers

Or you can convert it to ToList() and use ForEach method.

users.ToList().ForEach(u => u.MyProp = false); 

to update more than one properties

users.ToList().ForEach(u =>                       {                          u.property1 = value1;                          u.property2 = value2;                       }); 

Or like this

(from u in context.Users where u.Name == "George" select u).ToList() .ForEach(u => u.MyProp = false); 
like image 191
Anuraj Avatar answered Sep 28 '22 18:09

Anuraj


You can create your own ForEach extension method:

public static IEnumerable<T> ForEach<T>(this IEnumerable<T> source, Action<T> action) {     foreach (var element in source)     {         action(element);     }      return source; } 

Then your code can be simplified to:

context.Users.Where(x => x.Name == "George").ForEach(u => u.MyProp = false); 

EDIT: You could also yield return each item after the call to action() (no pun intended) to leave the deferred execution untouched.

like image 42
Johann Blais Avatar answered Sep 28 '22 17:09

Johann Blais