Je n'arrive pas à traduire une requête TSQL existante avec une clause "Not Exist" en LINQ de travail pour une utilisation dans une application ASP.NET MVC.Aide à la réécriture de la requête TSQL existante avec clause "Not Exists" dans LINQ
Voici ma requête existante.
SELECT
OrgID,
ContentID,
FriendlyTitle
FROM
ContentRollup CR
WHERE
OrgID = @sOrgID
OR
(
OrgID = '*'
AND NOT EXISTS (
SELECT NULL
FROM ContentRollup
WHERE OrgID = @sOrgID AND ContentID = CR.ContentID
)
)
La table interrogée, ContentRollup, ressemble à ceci:
OrgID ContentID FriendlyTitle
------ ---------- ----------------
* xxx111 Default text 1
* xxx222 Default text 2
* xxx333 Default text 3
AAA xxx333 AAA text 3
BBB xxx333 BBB text 3
En un mot, cela fait partie d'un CMS-construire la maison qui sert des variations spécifiques Org du même contenu . Cela nous a servi solidement pendant des années. Les enregistrements avec OrgID de * sont des valeurs par défaut pour tous les Orgs, mais ils seront remplacés si un OrgID est passé.
Par exemple, si je ne passe rien ou CCC, les trois * enregistrements seront retournés. Si je passe AAA, alors les deux premiers enregistrements par défaut retourneront ainsi que l'enregistrement AAA. Si je passe en BBB, les deux premiers enregistrements par défaut retourneront ainsi que l'enregistrement BBB.
Alors ... comment je traduis cela en LINQ? J'ai essayé différentes versions de .Contains et .Except mais je n'arrive pas à l'utiliser avec plusieurs critères.
Le plus proche que j'ai obtenu est
var result = from c in DB.Content
where (
c.OrgID == orgID
||
(
c.OrgID == "*"
&& !(from c1 in DB.Content
select c1.OrgID)
.Contains(orgID)
)
)
select c;
, mais je ne peux pas les critères « et ContentID = CR.ContentID » où je le veux.
Parfait. Exactement ce dont j'avais besoin. – Mike