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

Использование LINQ для обновления свойства в списке объектов

Скажем, у меня есть сущность, которая выглядит примерно так:

MyEntity 
{
   int property1;
   int property2;
   int property3;
}

Теперь предположим, что у меня есть список IEnumerable этих entites. Есть ли запрос LINQ, который я могу выполнить, чтобы установить значение property1 равным 100 для каждого объекта в списке? Я знаю, что могу сделать это через foreach, но задавался вопросом, может ли LINQ сделать это более элегантно.

4b9b3361

Ответ 1

Вот так:

var result = GetMyIEnumerable()
                .ToList();
result.ForEach(x => x.property1 = 100);

Ответ 2

В точку Дарина LINQ построен для запросов. Я пришел к выводу, что при работе с LINQ объекты, которые запрашиваются, должны рассматриваться как неизменные. Однако оператор Select также отлично подходит для преобразований.

Итак, вы можете решить свою проблему, перейдя из одного набора в другой следующим образом:

var result = myEntityCollection.Select(e => {
   var ret = e;
   e.property1 = 100;
   return e; });

Элементы в исходной коллекции нетронуты, но теперь элементы в результате имеют свойство1, установленное в 100.

Ответ 3

Вот два решения, которые я нашел, которые работали для меня.

result = result.Where(x => (x.property1 = 100) == 100).ToList();

или

result = result.Select(c => { c.property1 = 100; return c; }).ToList();

Ответ 4

Если у вас есть 100 свойств, возможно, отражение будет самым элегантным. LINQ для запроса не обновляется.

Ответ 5

В дополнение к Darrelk и mkedobbs, код VB.NET:

object.list =
    object.list.Select(Function(x)
                           x.property = If(x.property.Length > 3, x.property.Substring(0, 3), x.property)
                           Return x
                       End Function).ToList()