【发布时间】:2013-12-05 02:23:09
【问题描述】:
我有这个 LINQ 查询
dbContext.Customers.Where(c => c.AssetTag == assetTag).Count();
或
(from c in dbContext.Customers
where c.AssetTag == assetTag
select c).Count();
生成的SQL是
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Customer] AS [Extent1]
WHERE (([Extent1].[AssetTag] = @p__linq__0) AND ( NOT ([Extent1].[AssetTag] IS NULL OR @p__linq__0 IS NULL))) OR (([Extent1].[AssetTag] IS NULL) AND (@p__linq__0 IS NULL))
) AS [GroupBy1]
那么,为什么 LINQ 会为一个简单的 where 语句生成如此复杂的 SQL?
【问题讨论】:
-
您的
[AssetTag]列是否允许为null?。 -
对我来说似乎并不复杂,它只是创建一个语句来保护您的呼叫免受空范围的影响
-
您能告诉我如何从 Linq 或 Lamda 获取此 SQL 查询吗?这与您的问题完全无关,但我无法获得。
-
@e10 您可以使用 ToTraceString 方法 (msdn.microsoft.com/en-us/library/…) 或 LINQPad 之类的工具。
标签: c# sql linq entity-framework