【发布时间】:2016-03-24 23:30:08
【问题描述】:
我是 Entity Framework 的新手,我正在处理查询并找到了解决方案,但在使用 LINQPad 进行了一些调查后,我不喜欢生成的 SQL。
Linq 查询是:
from p in Person
from pcc in p.PersonCreditCard
group p by new { pcc.CreditCard.CardType } into g
select new
{
cname = g.Key.CardType,
cptPerson = g.Count()
}
生成的sql查询是
SELECT COUNT(*) AS [cptPerson], [t2].[CardType] AS [cname]
FROM [Person].[Person] AS [t0]
CROSS JOIN [Sales].[PersonCreditCard] AS [t1]
INNER JOIN [Sales].[CreditCard] AS [t2] ON [t2].[CreditCardID] = [t1].[CreditCardID]
WHERE [t1].[BusinessEntityID] = [t0].[BusinessEntityID]
GROUP BY [t2].[CardType
注意交叉连接。 据我所知,使用 CROSS JOIN 不是一个好主意。 为什么会这样?
我可以使用另一种语法来获得相同的结果(按信用卡类型计算人数)
【问题讨论】:
-
如果您包含 Person 和 PersonCreditCard 的模型,将会很有用。我想这可能是一对多的关系,但我不想假设。如果是,那么您的映射可能已关闭,这肯定会解释它,因为 EF 不知道这两个实体在 DB 模型中是如何相关的。
标签: c# sql-server entity-framework linq