使用 MySQl 5.5.19,实体框架 4.3,并尝试了 Sun 提供的 MySQL 连接器和 DevArt 连接器,两者之间没有任何区别。
所以,我有两个产生不同查询的语句。第一个是:
var desserts = context.desserts
.AsQueryable()
.OrderBy(m => m.Id)
.Where(m => m.FlavorId == 123)
.ToList();
第二个是
var desserts = context.desserts
.AsQueryable()
.OrderBy(m => m.Id)
.Where(m => m.FlavorId == someFlavorId)
.ToList();
第一个查询生成如下所示的 SQL 查询:
SELECT
Extent1.Id,
Extent1.Name,
Extent1.FlavorId
FROM icecream.dessert AS Extent1
WHERE Extent1.FlavorId = 123
ORDER BY Extent1.Id ASC
第二个会产生一个成本更高的查询,看起来像这样:
SELECT
Project1.Id,
Project1.Name,
Project1.FlavorId
FROM(
SELECT
Extent1.Id,
Extent1.Name,
Extent1.FlavorId
FROM icecream.dessert AS Extent1
WHERE Extent1.FlavorId = 123
) AS Project1
ORDER BY Project1.Id ASC
而且,当然,后一个查询是我的生产代码中使用的查询。我很困惑为什么这两个会导致不同的查询。
任何想法如何解决这一问题?