Asp.net mvc 使用“帮助重写现有TSQL查询”;“不存在”;LINQ中的子句

Asp.net mvc 使用“帮助重写现有TSQL查询”;“不存在”;LINQ中的子句,asp.net-mvc,linq,linq-to-sql,Asp.net Mvc,Linq,Linq To Sql,我无法将带有“notexist”子句的现有TSQL查询转换为可在ASP.NETMVC应用程序中使用的工作LINQ 这是我现有的查询 SELECT OrgID, ContentID, FriendlyTitle FROM ContentRollup CR WHERE OrgID = @sOrgID OR ( OrgID = '*' AND NOT EXISTS ( SELECT NU

我无法将带有“notexist”子句的现有TSQL查询转换为可在ASP.NETMVC应用程序中使用的工作LINQ

这是我现有的查询

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
        )
    )
要查询的表ContentRollup如下所示:

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
简而言之,这是一个家庭构建的CMS的一部分,该CMS服务于同一内容的组织特定变体。多年来,它一直为我们服务。OrgID为*的记录是所有Org的默认值,但如果传入OrgID,则会覆盖这些记录

例如,如果我不传入任何内容或CCC,将返回三条*记录。如果我传入AAA,那么前两个默认记录将与AAA记录一起返回。如果我传入BBB,前两条默认记录将与BBB记录一起返回

所以。。。我到底该怎么把这个翻译成LINQ?我尝试了各种版本的.Contains和.Except,但无法使用多个条件

我得到的最接近的是

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;

但是我无法在需要的地方获得“AND ContentID=CR.ContentID”标准。

不存在转换为!Any():


完美的正是我需要的。
context.ContentRollup.
    Where(cr => 
        (cr.OrgID == sOrgId) 
        || 
        (
            (cr.OrgID == '*') 
            && 
            (!context.ContentRolup.Any(cr2 => 
                 (cr2.OrgID == sOrgId) && 
                 (cr2.ContentID == cr.ContentID))
            )
        ).ToList()