【发布时间】:2011-05-23 15:36:36
【问题描述】:
我正在使用带有 MySQL ADO.Net 连接器的 Entity Framework 和 Linq to Entities 来访问 MySQL 数据库。
有两个表 Requests 和 Submissions,从 Requests 到 Submissions 是一对多的关系。因此,Submissions 表包含一个 RequestId 列,该列具有对 Requests 的外键依赖性。
我需要检索其提交包含特定值的所有请求。在 LINQ 中,我可以通过以下两种方式之一:
var r1 = foo.Submissions.Where(s => s.FieldName == "foo" && s.FieldValue == "bar").Select(s => s.Request).Distinct();
var r2 = foo.Requests.Where(r => r.Submissions.Any(s => s.FieldName == "foo" && s.FieldValue == "bar"));
计算结果为
SELECT `Distinct1`.*
FROM
(SELECT DISTINCT `Extent2`.*
FROM `Submissions` AS `Extent1` INNER JOIN `Requests` AS `Extent2` ON `Extent1`.`RequestId` = `Extent2`.`RequestId`
WHERE ("foo" = `Extent1`.`FieldName`) AND ("bar" = `Extent1`.`FieldValue`))
AS `Distinct1`
SELECT `Extent1`.*
FROM `Requests` AS `Extent1`
WHERE EXISTS
(SELECT 1 AS `C1`
FROM `Submissions` AS `Extent2`
WHERE (`Extent1`.`RequestId` = `Extent2`.`RequestId`) AND ((@gp1 = `Extent2`.`FieldName`) AND (@gp2 = `Extent2`.`FieldValue`)))
现在第一种查询方式使用 INNER JOIN...现在是否比第二种选择效率低?
【问题讨论】:
标签: mysql linq tsql entity-framework linq-to-entities