这是一种用于获取表数据的方法。虽然代码“有效”,但它已成为我们应用程序的瓶颈。在某些地区,加载页面可能需要30秒。
var orderBy = String.IsNullOrEmpty(options.SortColumn) ? GetOrderBy<T>() : options.SortColumn;
var orderbyDirection = (options.SortDirection == SortDirection.Desc ? " descending" : "");
options.TotalSize = queryable.Count();
queryable = queryable
.SearchProperties(options.SearchPhrase)
.OrderBy(orderBy + orderbyDirection)
.SetPaging(options);
return queryable;
在调查中我发现当它遇到OrderBy语句时出于某种原因将查询转换为嵌套选择。
它将生成的查询示例
{SELECT
[Project1].[Id] AS [Id],
[Project1].[EntryDate] AS [EntryDate],
[Project1].[Description] AS [Description],
[Project1].[DiaryTypeString] AS [DiaryTypeString],
[Project1].[DiaryViewType] AS [DiaryViewType],
[Project1].[DiaryGroup] AS [DiaryGroup],
[Project1].[ReminderDate] AS [ReminderDate],
[Project1].[HasAttachments] AS [HasAttachments],
[Project1].[OwnerId] AS [OwnerId],
[Project1].[PropertyId] AS [PropertyId],
[Project1].[TenancyId] AS [TenancyId],
[Project1].[SupplierId] AS [SupplierId]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[EntryDate] AS [EntryDate],
[Extent1].[Description] AS [Description],
[Extent1].[DiaryTypeString] AS [DiaryTypeString],
[Extent1].[DiaryViewType] AS [DiaryViewType],
[Extent1].[DiaryGroup] AS [DiaryGroup],
[Extent1].[ReminderDate] AS [ReminderDate],
[Extent1].[HasAttachments] AS [HasAttachments],
[Extent1].[OwnerId] AS [OwnerId],
[Extent1].[PropertyId] AS [PropertyId],
[Extent1].[TenancyId] AS [TenancyId],
[Extent1].[SupplierId] AS [SupplierId]
FROM [dbo].[vwDiary] AS [Extent1]
WHERE (([Extent1].[OwnerId] = @p__linq__0) OR (([Extent1].[OwnerId] IS NULL) AND (@p__linq__0 IS NULL))) AND ( NOT ((N'Work Order' = [Extent1].[DiaryTypeString]) AND ([Extent1].[DiaryTypeString] IS NOT NULL))) AND ( NOT ((N'Alert' = [Extent1].[DiaryTypeString]) AND ([Extent1].[DiaryTypeString] IS NOT NULL)))
) AS [Project1]
ORDER BY [Project1].[EntryDate] DESC}
我有点担心此时该做什么,OrderBy的实施方式有问题吗?有没有其他方法可以通过动态列进行订购?