0

我的一些查询存在一些性能问题。当我向 Sql Server 查询慢查询列表时,我发现了一些由 Linq-To-Entities 生成的查询。

例如:

SELECT 
[Project12].[OrderId] AS [OrderId], 
[Project12].[OrderDate] AS [OrderDate], 
[Project12].[OrderStatusId] AS [OrderStatusId], 
[Project12].[Name] AS [Name], 
[Project12].[C1] AS [C1], 
[Project12].[ClientId] AS [ClientId], 
[Project12].[ClientCode] AS [ClientCode], 
[Project12].[TwoLetterCode] AS [TwoLetterCode], 
[Project12].[Identifier] AS [Identifier], 
[Project12].[StartDate] AS [StartDate], 
[Project12].[Code] AS [Code], 
[Project12].[C2] AS [C2], 
[Project12].[C3] AS [C3], 
[Project12].[C4] AS [C4], 
[Project12].[C5] AS [C5]
FROM ( SELECT 
    [Project11].[OrderId] AS [OrderId], 
    [Project11].[ClientId] AS [ClientId], 
    [Project11].[StartDate] AS [StartDate], 
    [Project11].[Identifier] AS [Identifier], 

....

我尝试使用不同的字段来查找我在哪里查询这些字段,但我找不到在哪里。

可以使用什么技术来查找哪个 Linq 查询生成了一些 sql?

4

2 回答 2

0

我相信您可以对 Linq to SQL 使用 DataContext.Log 方法(我相信这也适用于 Linq to Entities):http: //msdn.microsoft.com/en-us/library/system.data.linq。数据上下文.log.aspx

将其与 StreamWriter 连接起来,您就可以看到您的 Linq 在做什么。然后,您可以使用此日志与您从 SQL 探查器日志中获得的内容进行比较,并查看究竟在做什么来比较两者。

我也更喜欢在直接使用 SQL 进行调试时使用 LinqPad。您甚至可以将实体框架的 DLL 直接导入其中以进行查询。

http://www.linqpad.net/

于 2013-02-15T16:50:15.937 回答
0

我在ThinqLinq发布了许多可能有助于隔离您的 LINQ 性能问题的技术。

于 2013-02-15T18:17:13.580 回答