【发布时间】:2013-08-07 14:18:16
【问题描述】:
在 Windows 2008 R2 服务器上部署时,我的应用程序遇到了一个非常奇怪的问题。
鉴于这个非常简单的 LINQ sn-p:
return From
invoice In Me.Invoices
Where
loggedCustomerID.Contains(invoice.Contract.CustomerID)
Order By
invoice.Date Descending
应用程序可以工作,但在某些情况下(在客户服务器上),生成的 T-SQL 很奇怪:
SELECT
[Extent1].[ContractID] AS [ContractID], ...
FROM
[dbo].[Invoice] AS [Extent1]
INNER JOIN [dbo].[Contract] AS [Extent2] ON
[Extent1].[ContractID] = [Extent2].[ContractID]
LEFT OUTER JOIN [dbo].[Contract] AS [Extent3] ON
[Extent1].[ContractID] = [Extent3].[ContractID]
WHERE
[Extent2].[CustomerID] = 482283
OR [Extent3].[CustomerID] IN (498565,482282,498564,498566)
- 表格链接多次 (?)
-
IN语句被分解为多个 T-SQL 条件,而不是单个IN语句
显然,相同的包在我的系统上运行良好,生成正确查询,无需多次链接同一个表并且只创建一个IN 语句。
我使用的是 EF 5.0,但与 Framework 4.0 兼容(因此程序集显示版本 4.4)。这是这个问题的根本原因吗?
这里有什么问题?
【问题讨论】: