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