c# - linq2sql 呈现不必要的 ORDER BY

标签 c# linq-to-sql

我有一个有点复杂的 linq2sql 查询,它不包含任何“order by”语句,但不知何故 linq2sql 认为它是必要的并插入它。不幸的是,这个“order by”语句会影响性能,我不知道如何删除它......

这是 linq2sql 表达式(我不认为它们可能有帮助,但无论如何......)

var lockedBy = Guid.NewGuid();
var locks = LinqDataContext.Instance.LockBranches(3, lockedBy, DateTime.Now + TimeSpan.FromMinutes(3)); // Stored procedure...

var x = LinqDataContext.Instance.Branches
.Where(branch => branch.LockedBy == lockedBy)
.Select
(
    branch => new
    {
        Branch = branch,
        Leaves = branch.Leaves
        .Select
        (
            leaf => new
            {
                Leaf = leaf,
                Estimate = leaf.Representation.Estimates
                .GroupBy(estimate=>estimate.SegmentID)
                .Sum
                (
                    estimatesBySegment => estimatesBySegment.Average
                    (
                        estimate => estimate.EstimateRequests.Average
                        (
                            estimateRequest => estimateRequest.EstimateSubmit.Value
                        )
                    )
                )
            }
        )
    }
);

它呈现为以下 sql

SELECT [t0].[ID], [t0].[IndexID], [t0].[IndexNo], [t0].[Sealed], [t0].[LockedBy], [t0].[UnlockOn], [t1].[ID] AS [ID2], [t1].[BranchID], [t1].[RepresentationID], [t1].[Xml], (
    SELECT SUM([t7].[value])
    FROM (
        SELECT AVG([t6].[value]) AS [value]
        FROM (
            SELECT (
                SELECT AVG([t5].[Value])
                FROM [dbo].[EstimateRequests] AS [t4]
                LEFT OUTER JOIN [dbo].[EstimateSubmits] AS [t5] ON [t5].[EstimateRequestID] = [t4].[ID]
                WHERE [t4].[EstimateID] = [t3].[ID]
                ) AS [value], [t2].[ID], [t3].[RepresentationID], [t3].[SegmentID]
            FROM [dbo].[Representations] AS [t2], [dbo].[Estimates] AS [t3]
            ) AS [t6]
        WHERE ([t6].[ID] = [t1].[RepresentationID]) AND ([t6].[RepresentationID] = [t6].[ID])
        GROUP BY [t6].[SegmentID]
        ) AS [t7]
    ) AS [Estimate], (
    SELECT COUNT(*)
    FROM [dbo].[Leaves] AS [t8]
    WHERE [t8].[BranchID] = [t0].[ID]
    ) AS [value]
FROM [dbo].[Branches] AS [t0]
LEFT OUTER JOIN [dbo].[Leaves] AS [t1] ON [t1].[BranchID] = [t0].[ID]
WHERE [t0].[LockedBy] = @p0
ORDER BY [t0].[ID], [t1].[ID]  <-- Here's the unnecessary ORDER BY

最佳答案

需要 order by 才能区分子集合 Leaves。 (每次你有一个子集合时,都有一个order by)

关于c# - linq2sql 呈现不必要的 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395081/

相关文章:

c# - 在 Novacode 中为 Docx 添加样式

c# - 使用 forEach 迭代 IQueryable 与调用 ToList() 然后执行 forEach - 性能

c# - 为什么 CaSTLe Windsor 拦截器会破坏 C# 动态对象上方法的运行时绑定(bind)?

c# - Azure API 管理中的每个应用程序是否应该有多个 API 端点来调用单个 API 应用程序?

c# - 如何在 C# 中创建 F# 匿名记录?

c# - 如果两个字符串都包含值,则需要连接两个字符串;如果第一个字符串为 NULL,则返回一个值

c# - LinqToSql查询返回时间太长性能太长

.NET 数据库枚举

c# - 如何使用 LINQ to SQL 和 DbLinq 选择空值?

c# - 带有控制台应用程序的 FileSystemWatcher