C# 什么';这个连接多个表的linq外部连接有什么问题?

C# 什么';这个连接多个表的linq外部连接有什么问题?,c#,linq,join,C#,Linq,Join,这是我第一次与LINQ进行外部连接。我认为我的查询很接近,但它返回的行比它应该返回的行多得多。由LINQ查询创建的SQL返回2522条记录,而下面显示的SQL等价项只返回8条记录,这是正确的数字。linq查询中的iqid由一个常量设置,以隔离测试用例的这一条记录 我还想知道为什么where语句中的两个bool评估不起作用。第一个是,但是其他两个被注释掉了,因为它们不会编译。我试着像第一条语句那样使用“==”,用0代替false,但两种方法都不起作用 这个查询有什么问题 林克: 这就是我创建的sq

这是我第一次与LINQ进行外部连接。我认为我的查询很接近,但它返回的行比它应该返回的行多得多。由LINQ查询创建的SQL返回2522条记录,而下面显示的SQL等价项只返回8条记录,这是正确的数字。linq查询中的iqid由一个常量设置,以隔离测试用例的这一条记录

我还想知道为什么where语句中的两个bool评估不起作用。第一个是,但是其他两个被注释掉了,因为它们不会编译。我试着像第一条语句那样使用“==”,用0代替false,但两种方法都不起作用

这个查询有什么问题

林克:

这就是我创建的sql(不是由linq查询生成的)的样子,它返回8行,这是预期的结果。这也是linq创建的sql应该是什么样子的:

select  L.[IQID]
    ,L.[IQDELETED]
    ,L.[NOTE]           'Linked NoteID'
    ,L.[FUND]           'Linked FundID'
    ,F.Fund             'Linked Fund'
    ,L.[ACCOUNT]            'Linked CompanyID'
    ,A.NAME             'Linked Company'
    ,L.[PROJECT]            'Linked DealID'
    ,D.LIBELLE          'Linked Deal'
    ,L.[CONTACT]            'Linked ContactID'
    ,CONCAT(C.FIRSTNAME,' ',C.LASTNAME) 'Linked Contact' 

FROM VCNOTELINKS L

LEFT OUTER JOIN VCFUND F ON L.FUND = F.IQID
LEFT OUTER JOIN SFAACCOUNT A ON L.ACCOUNT = A.IQID
LEFT OUTER JOIN VCPROJECT D ON L.PROJECT = D.IQID
LEFT OUTER JOIN SFACONTACT C ON L.CONTACT = C.IQID

where L.note = '9C01FFAE9B4E43D7853D811C8CF77B09' AND L.IQDELETED = 0

除了连接,您应该使用导航属性,在数据库中创建一个视图,并对所有连接进行优化,这不是更容易吗?顺便说一句,where子句中的最后两个条件是执行赋值,而不是相等检查。应该是
n.IQDELETED==false&&l.IQDELETED==false
您需要一个类似于所示网页示例中的“into”。where仅应用于“in companyGroup.DefaultIfEmpty()”中的最后一个对象,而不是整个联接。
select  L.[IQID]
    ,L.[IQDELETED]
    ,L.[NOTE]           'Linked NoteID'
    ,L.[FUND]           'Linked FundID'
    ,F.Fund             'Linked Fund'
    ,L.[ACCOUNT]            'Linked CompanyID'
    ,A.NAME             'Linked Company'
    ,L.[PROJECT]            'Linked DealID'
    ,D.LIBELLE          'Linked Deal'
    ,L.[CONTACT]            'Linked ContactID'
    ,CONCAT(C.FIRSTNAME,' ',C.LASTNAME) 'Linked Contact' 

FROM VCNOTELINKS L

LEFT OUTER JOIN VCFUND F ON L.FUND = F.IQID
LEFT OUTER JOIN SFAACCOUNT A ON L.ACCOUNT = A.IQID
LEFT OUTER JOIN VCPROJECT D ON L.PROJECT = D.IQID
LEFT OUTER JOIN SFACONTACT C ON L.CONTACT = C.IQID

where L.note = '9C01FFAE9B4E43D7853D811C8CF77B09' AND L.IQDELETED = 0