Подтвердить что ты не робот

Выберите записи, которые не существуют в другой таблице в Entity Framework

У меня есть две таблицы "Клиент" и таблица клиентов "Черный список". Когда я черным списком клиента, я помещаю clientid в качестве внешнего ключа в таблицу Blacklist.

Что я хочу, я хочу получить CusId и Name, которые не находятся в таблице BlackList.

Пожалуйста, помогите мне закодировать эту Entity Framework С#. Спасибо заранее.

Customer
---------
(CusId,Name,Telephone,Email)

Blacklist
---------
(CusId)
4b9b3361

Ответ 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;