Je veux faire un LINQ NOT EXISTS sur requête MULTIPLE TABLES.Linq NOT EXISTS plusieurs tables
Tous les exemples sur Google ou SO traitent deux tables Je travaille avec trois donc je me bats comme un débutant sur LINQ sur la façon de les référencer correctement.
Tout d'abord j'ai essayé cette requête 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
});
je les trois fois laid de comme je ne suis pas bon avec la création de types pour y adhérer. Mais cela a donné un mauvais résultat et je compris que je devais aller pour un PAS EXISTE
Je construit une nouvelle requête en T-SQL
Ceci est la requête SQL cela fonctionne!
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
)
Comment ferais-je cela dans LINQ?
C'est la question, j'accorderai ma réponse pour cela!
BUT!
Quand nous y sommes ... Je suis vraiment curieux de la réponse .. Est-il possible de faire une requête LINQ qui retourne un IEnumerable à la fois ceux qui EXISTS et NOT EXISTS résultant dans un objet qui contiendra VALEURS différentes sur la propriété checked
EXISTE -> checked = true
NOT EXISTS -> vÉRIFIÉ = false
Voilà comment je crée mon objet.
.Select(x => new ViewModelCheckBox()
{
Value = x.id.ToString(),
Name = x.name,
Checked = this should be different based on exists or not
});
Pour votre deuxième question: Conceptuallly c'est juste une jointure externe gauche avec une clause WHERE qui sélectionne uniquement les enregistrements avec un champ non annulable de la table de droite étant NULL. –