Подтвердить что ты не робот

Запрос и обновление свойства в коллекции с использованием 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");
4b9b3361

Ответ 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();