Я хочу сделать LINQ NOT EXISTS по запросу MULTIPLE TABLES.Linq NOT EXISTS несколько таблиц
Все примеры из Google или SO обрабатывают две таблицы Я работаю с тремя, поэтому я боюсь как новичок в LINQ, как правильно их ссылаться.
Сначала я попробовал этот LINQ запрос
var nocertificates = (
from x in rmdb.t_certificates
from ce in rmdb.t_user_certificates
from u in rmdb.t_users
where u.id == ce.uid && ce.value != x.id
select x).AsEnumerable().Select(x => new ViewModelCheckBox()
{
Value = x.id.ToString(),
Name = x.name,
Checked = false
});
Я использовал уродливые три раза по сравнению с, как я не так хорошо с созданием типов для присоединения. Но это дало неправильный результат, и я понял, что я должен был пойти для НЕ СУЩЕСТВУЕТ
Я построил новый запрос в T-SQL
Это является SQL-запрос, это работает!
select distinct * from t_certificates tc
where NOT EXISTS
(
select distinct * from t_users tu, t_user_certificates tuc
WHERE tu.email = '[email protected]'
and tu.id = tuc.[uid]
and tuc.value = tc.id
)
Как бы это сделать в LINQ?
Это вопрос, я буду награждать свой ответ за это!
BUT!
Когда мы находимся в этом ... Мне действительно интересно ответить. Возможно ли сделать один запрос LINQ, который возвращает Ienumerable с теми, которые EXISTS и NOT EXISTS приводят к объекту, который будет удерживать РАЗЛИЧНЫЕ ЗНАЧЕНИЯ на проверяемое имуществе
СУЩЕСТВУЕТ -> пРОВЕРЕНО = истина
НЕ СУЩЕСТВУЕТ -> пРОВЕРЕНО = ложь
Это, как я создаю свой объект.
.Select(x => new ViewModelCheckBox()
{
Value = x.id.ToString(),
Name = x.name,
Checked = this should be different based on exists or not
});
Для вашего второго вопроса: Conceptuallly это только левая внешнее соединение с ИНЕК, который выбирает только записи с Ненулевыми полями из таблицы правой быть NULL. –