LINQ запрос, где ID не существует как свойство в списке объектов - PullRequest
0 голосов
/ 17 января 2019

У меня есть список объектов, которые содержат идентификационные номера. Я хочу запросить таблицу в моей базе данных, чтобы получить все строки, в которых идентификатор не совпадает с идентификатором любого из объектов в моем списке.

List<Item> allItems = new List<Item>();
// Populate allItems

Item - это простой объект с public int ItemID и public string Name.

Вот LINQ, который я пытался запросить в конкретной таблице, чтобы получить только те строки, которые не существуют как ItemID в allItems:

var filtered = ctx.PurchasedItems.Where(x => allItems.Select(y => y.ItemID).ToList().Contains(x.FK_ItemID)).ToList();

Как видите, dbo.PurchasedItems имеет столбец FK_ItemID, который соответствует ItemID в объекте Item.

Хотя это компилируется, я получаю следующую ошибку при запуске:

"Невозможно создать постоянное значение типа 'DemoProject.Models.ItemDatabase.PurchasedItems'. Только примитивные типы или типы перечисления поддерживаются в этом контексте. "

Другой метод, который я попробовал, был:

var p = ctx.PurchasedItems.Where(x => x.FK_ItemID.IsAnyOf(allItems.Select(y => y.ItemID).ToArray())).ToList();

... но это привело к аналогичной ошибке.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 18 января 2019

перепишу вопрос

У меня есть список (someItems) объектов с числовыми идентификаторами. Я хочу запросить таблицу PurchasedItems в моей базе данных, чтобы получить все строки, где FK_ItemID не совпадает с идентификатором любого из объектов в моем списке someItems.

Мой ответ:

List<Item> someItems = new List<Item>();
// Populate someItems
List<int> someItemIDs = someItems.Select(i=>i.ID).ToList();
var filtered = ctx.PurchasedItems
                  .Where(x => !someItemIDs.Contains(x.FK_ItemID))
                  .ToList();

Как отмечено в комментарии @juharr, EF не может работать с коллекцией не примитивных типов, потому что пытается преобразовать это в SQL. Вы можете сначала создать коллекцию someItemIDs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...