Ваш собственный код подойдет. Однако может возникнуть проблема с производительностью, так как вы извлекаете все идентификаторы из базы данных, поэтому следующее более эффективно.
var idsInDatabase =
from t in DataContext.Table
where idsOfInterest.Contains(t.ID)
select t.ID;
var idsDeletes = idsOfInterest.Except(idsInDatabase);
UPDATE:
Из вашего обновления, как я понимаю, вы хотели бы получить все недостающие идентификаторы из базы данных, что довольно сложно сделать, поскольку вы хотите, чтобы идентификаторы, которых больше не существует, из базы данных.
Если вы попытаетесь сделать это с простым старым SQL, вам понадобится либо таблица, содержащая большой список чисел {0, 1, 2, 3, ...} для объединения (так как ваш Table
больше не содержит все идентификаторы) или вы бы создали внутренний запрос или табличную функцию). Это может выглядеть так:
SELECT x.id
FROM (
SELECT 1 as id
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 3) x
LEFT OUTER JOIN Table t ON x.id = t.ID
WHERE t.ID IS NULL
Насколько я знаю, нет способа перевести такую конструкцию в LINQ to SQL. То же самое верно для табличных функций.
Итак, что вы можете сделать, это присоединиться к вашему Table
с каким-то Numbers
столом, но лично я бы не стал этого делать, поскольку вы просто слишком усложняете вещи.