LINQ to Entities加入实例而不是id会产生讨厌的SQL
发布时间:2020-12-12 16:31:46 所属栏目:MsSql教程 来源:网络整理
导读:任何人都可以解释为什么通过实体加入而不是id生成一些非常丑的sql,实际上在概念上它会做你认为是一样的事情?例如 按ID from companyDirector in CompanyDirectorsjoin contactAddress in ContactAddresses on companyDirector.ContactAddress.Id equals cont
任何人都可以解释为什么通过实体加入而不是id生成一些非常丑的sql,实际上在概念上它会做你认为是一样的事情?例如
按ID from companyDirector in CompanyDirectors join contactAddress in ContactAddresses on companyDirector.ContactAddress.Id equals contactAddress.Id select new {companyDirector,contactAddress} 生成 FROM [COMPANY] AS [Extent1] INNER JOIN [ADDRESS] AS [Extent2] ON [Extent1].[CONTACT_ADDRESS_ID] = [Extent2].[CONTACT_ADDRESS_ID] 例如 from companyDirector in CompanyDirectors join contactAddress in ContactAddresses on companyDirector.ContactAddress equals contactAddress select new {companyDirector,contactAddress} 生成 FROM [COMPANY] AS [Extent1] INNER JOIN [ADDRESS] AS [Extent2] ON EXISTS (SELECT 1 AS [C1] FROM ( SELECT 1 AS X ) AS [SingleRowTable1] LEFT OUTER JOIN (SELECT [Extent3].[CONTACT_ADDRESS_ID] AS [CONTACT_ADDRESS_ID] FROM [ADDRESS] AS [Extent3] WHERE [Extent1].[CONTACT_ADDRESS_ID] = [Extent3].[CONTACT_ADDRESS_ID] ) AS [Project1] ON 1 = 1 LEFT OUTER JOIN (SELECT [Extent4].[CONTACT_ADDRESS_ID] AS [CONTACT_ADDRESS_ID] FROM [ADDRESS] AS [Extent4] WHERE [Extent1].[CONTACT_ADDRESS_ID] = [Extent4].[CONTACT_ADDRESS_ID] ) AS [Project2] ON 1 = 1 WHERE [Project1].[CONTACT_ADDRESS_ID] = [Extent2].[CONTACT_ADDRESS_ID] ) 对我来说看起来效率很低,迫使你进入id路由.为什么要做左边的连接两次,不介意一次? 解决方法我不能说ADO.NET团队的头脑或代码是什么.也就是说,我看到两个可能的问题:>可能的是,ContractAddresses或者可能只在实体模型中的基础表中的Id字段不能被定义为主键.我有点怀疑这是问题,但值得双重检查. 不过,我很喜欢@Craig Stuntz在解释他的评论.此外,您可能希望获得更长查询的执行计划,以查看它是否真的像看起来一样糟糕;查询优化器可能会比代码指示的更好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql – 如何有效地删除行,而不使用截断表在一个5
- CSharp基础起步第十六期---SqlServer 基础04(聚
- mysql启动提示mysql.host 不存在,启动失败的解决
- sql-server – 使用Row_Number在Sql Server 2008
- SQLServer中服务器角色和数据库角色权限详解
- sql-server – 当SQL Server需要比Datalength更多
- 关于重新组织和重新生成索引sp_RefreshIndex的介
- sql-server-2008 – SQL Server 2008中允许的最大
- 详解用SELECT命令在MySQL执行查询操作的教程
- sqlserver查询一个表有多少列
热点阅读