私はちょっと複雑なlinq2sqlクエリを持っていますが、order byステートメントは含まれていませんが、linq2sqlはそれが必要だと思って挿入します。残念ながら文がパフォーマンスを痛いと私はそれを削除する方法がわからないこの「順」...linq2sqlは不要ですORDER BY
はここでlinq2sql式(Iはとにかく、彼らは役立つかもしれないと思いますが、ない...)
です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
)
)
)
}
)
}
);
それは、order by
が子コレクションLeaves
を区別することができるように必要とされる次の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
どのようにして注文が成績を傷つけるのか分かりますか? – Jeff
LINQ2SQLは、INNER結合で十分であるLEFT OUTER JOINを生成するという厄介な習慣があります。この方法の唯一の方法は、結合を手動で記述し、生成された関連付けに依存しないことです。それはバグかもしれないし、何か...私はこの余分な "オーダー"で同じアプローチを試してみることをお勧めします - ちょうど結合を書き出し、違いがあるかどうかを見てください。 –
ジェフ、あなたは正しいわ私はわかりません、私はこの「順序付け」が冗長であることを知っています、そして、私はそれがそこにあることを望んでいません... – Lu4