Установите для всех членов коллекции с LINQ значение NULL - PullRequest
1 голос
/ 02 марта 2020

В соответствии с этой статьей https://visualstudiomagazine.com/articles/2019/07/01/updating-linq.aspx я хочу обновить набор сбора, одно поле которого равно NULL для всех элементов

//Set all Entity_For = null 
   var relatedPlanToDos = DB.PlanToDos.Where(x => x.EntityFor != null && x.EntityFor.ID == entity.ID);
   relatedPlanToDos.Select(c => { c.EntityFor = null ; return c; }).ToList();

Это синтаксическая ошибка, которую я получаю:

Лямбда-выражение с телом оператора не может быть преобразовано в дерево выражений

Любая помощь приветствуется

Ответы [ 3 ]

0 голосов
/ 02 марта 2020

Вообще говоря, запросы Linq должны быть только для чтения. То, что вы хотите достичь, это обновление. Вы можете попробовать ForEach метод для сбора, но фактический результат может зависеть от других свойств возвращаемых данных.

var relatedPlanToDos = DB.PlanToDos.Where(x => x.EntityFor != null && x.EntityFor.ID == entity.ID);
    relatedPlanToDos.ForEach(c => { c.EntityFor = null; });
0 голосов
/ 02 марта 2020

Измените это на:

var relatedPlanToDos = DB.PlanToDos.Where(x => x.EntityFor != null && x.EntityFor.ID == entity.ID).ToList().ForEach(c => c.EntityFor = null);
0 голосов
/ 02 марта 2020

Сначала вы должны получить все значения из linq-to- sql на .ToList()

var relatedPlanToDos = DB.PlanToDos.Where(x => x.EntityFor != null 
                                             && x.EntityFor.ID == entity.ID).ToList();

Затем вы можете сделать это

relatedPlanToDos.Select(c => { c.EntityFor = null ; return c; }).ToList();

или

relatedPlanToDos.ForEach(c => c.EntityFor = null);

Советы

  1. Вы должны знать В чем разница между IQueryable и IEnumerable ?

  2. На самом деле вам не нужно проверять x.EntityFor != null, прочитайте следующее, чтобы лучше понять

Как проверить, существует ли значение в таблице базы данных, игнорируя ноль в LINQ C#

...