Запрос и обновление свойства в коллекции с использованием LINQ
Какой самый succint/простой способ обновления одного свойства определенного элемента в коллекции с помощью LINQ?
Например, если у меня есть Список следующих:
public class Ticket
{
public string Name { get; set; }
public string Code { get; set; }
public bool Selected { get; set; }
}
Как я могу использовать LINQ для обновления свойства "Selected" элемента Ticket, если его свойство "Name" имеет значение "Beach". В SQL это будет:
UPDATE Tickets SET Selected = true WHERE Name = 'Beach'
Я думал, что на правильном пути с этим...
tickets.Select(x => { x.Selected = true; return x; }).ToList().Where(x => x.Name == "Beach");
Ответы
Ответ 1
Вы можете изменить порядок, а затем использовать оператор ForEach:
tickets
.Where(x => x.Name == "Beach")
.ToList()
.ForEach(x => { x.Selected = true; });
Примечание:
- требуется
ToList()
, потому что IEnumerable не поддерживает ForEach в Linq - см. LINQ эквивалент foreach для IEnumerable <T>
- что для удобства чтения было бы лучше разделить это на запрос linq, а затем более традиционный цикл
foreach(x in list)
С#
- Если это linq-to-sql, вам нужно позвонить
SubmitChanges()
, чтобы сохранить ваши изменения.
Ответ 2
Бит поздно для ответа, но я думаю, что нам не нужно преобразовывать в ToList()
, как упоминалось stuart, что мы можем сделать, это просто изменить код Стюарта (который является замечательным фрагментом кода) следующим образом
tickets
.Where(x => x.Name == "Beach")
.All(x => x.Selected = true);
Другой вариант
tickets
.Where(x => x.Name == "Beach")
.All(x => { x.Selected = true; return true; });
Ответ 3
Позвольте мне начать с этого, не используйте LINQ для установки таких свойств, как не для LINQ.
Вы должны написать запрос, чтобы выбрать строки, которые нужно изменить, изменить их в цикле и отправить изменения в базу данных (если LINQ to SQL).
var query = tickets.Where(ticket => ticket.Name == "Beach");
foreach (var item in query)
item.Selected = true;
// if LINQ to SQL
context.SubmitChanges();