У меня есть список объектов, которые содержат идентификационные номера. Я хочу запросить таблицу в моей базе данных, чтобы получить все строки, в которых идентификатор не совпадает с идентификатором любого из объектов в моем списке.
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();
... но это привело к аналогичной ошибке.
Кто-нибудь может мне помочь?