Выберите записи, которые не существуют в другой таблице в Entity Framework
У меня есть две таблицы "Клиент" и таблица клиентов "Черный список". Когда я черным списком клиента, я помещаю clientid в качестве внешнего ключа в таблицу Blacklist.
Что я хочу, я хочу получить CusId и Name, которые не находятся в таблице BlackList.
Пожалуйста, помогите мне закодировать эту Entity Framework С#. Спасибо заранее.
Customer
---------
(CusId,Name,Telephone,Email)
Blacklist
---------
(CusId)
Ответы
Ответ 1
Что вы хотите, это примерно следующее:
db.Customers
.Where(c => !db.Blacklists
.Select(b => b.CusId)
.Contains(c.CusId)
);
EF с радостью превратит это в подзапрос, который будет работать довольно хорошо.
Этот шаблон работает для статических списков (создает выражение IN(a, b, c)
), а также другие таблицы. Вы можете использовать его для проверки наличия в списке или нет в списке.
Если вы хотите протестировать его и увидеть SQL, который он генерирует, я настоятельно рекомендую LINQPad (он бесплатный). Это то, что я использую для тестирования небольших идей в LINQ все время.
Ответ 2
Как насчет чего-то вроде этого:
var subselect = (from b in BlackList select b.CusId).ToList();
var result = from c in Customer where !subselect.Contains(c.CusId) select c;