В этом контексте поддерживаются только примитивные типы или типы перечислений
Я думаю, что понимаю, почему мой код не работает, а именно потому, что я пытаюсь сравнить список в памяти с моей базой данных. Однако я не могу придумать, как обойти эту проблему?
У меня есть список, который содержит номера заказов, и мне нужно выбрать записи из базы данных, где номера заказов совпадают, и обновить запись до экспортированной.
Что я уже пробовал:
var ordernumbers = list.GroupBy(x => x.OrderReferenceNumber).ToList(); var update = (from c in _context.CDMains where ordernumbers.Any(x => x.Key == c.OrderReferenceNumber) select c).ToList(); foreach (var item in update) { item.Exported = true; _context.Entry(item).State = EntityState.Modified; }
F-ES Sitecore
EF преобразует синтаксис вашего запроса в инструкцию SQL, однако "ordernumbers" - это список объектов, существующих в памяти вашего приложения, так как же вы можете написать инструкцию SQL, которая проверяет память вызывающего приложения?
Вероятно, вам придется переупорядочить свой оператор так, чтобы вы действовали на c.OrderReferenceNumber и проверяли, находится ли его значение в ordernumbers, так как оно может быть преобразовано в
Где OrderReferenceNumber IN (....)
Может быть что-то вроде этого
https://stackoverflow.com/questions/21641016/check-if-list-contains-item-from-other-list-in-entityframework
Member 12285600
Спасибо, это сработало, и теперь я лучше понимаю эту проблему.