У меня есть запрос L2S с несколькими объединениями, который должен вернуть 11 записей за 3 секунды.Однако время ожидания истекает через 30 секунд, если я не укажу параметр Take (я использовал Take (20), даже если он возвращает только 11 записей), и в этом случае он возвращается в ожидаемый период времени в 3 секунды с 11 записями.
Запрос выглядит следующим образом:
(from q in TransmittalDetails where q.TransmittalHeader.TransmittalEntityID == 196
&& q.TransmittalHeader.DateRangeBeginTimeID == 20100101
&& q.TransmittalHeader.ScenarioID == 2
&& q.LineItem.AccountType.AccountCategory.AccountGroup.
AccountSummary.AccountSummaryID == 6
select new {
q.LineItem.AccountType.AccountCategory.AccountGroup.AccountGroupID,
q.LineItem.AccountType.AccountCategory.AccountGroup.AccountGroup1
}).Distinct()
Это генерирует некоторый SQL, который выглядит следующим образом:
DECLARE @p0 Int = 196
DECLARE @p1 Int = 20100101
DECLARE @p2 Int = 2
DECLARE @p3 Int = 6
SELECT DISTINCT [t5].[AccountGroupID], [t5].[AccountGroup] AS [AccountGroup1]
FROM [dbo].[TransmittalDetail] AS [t0]
INNER JOIN [dbo].[TransmittalHeader] AS [t1] ON [t1].[TransmittalHeaderID] =
[t0].[TransmittalHeaderID]
INNER JOIN [dbo].[LineItem] AS [t2] ON [t2].[LineItemID] = [t0].[LineItemID]
LEFT OUTER JOIN [dbo].[AccountType] AS [t3] ON [t3].[AccountTypeID] =
[t2].[AccountTypeID]
LEFT OUTER JOIN [dbo].[AccountCategory] AS [t4] ON [t4].[AccountCategoryID] =
[t3].[AccountCategoryID]
LEFT OUTER JOIN [dbo].[AccountGroup] AS [t5] ON [t5].[AccountGroupID] =
[t4].[AccountGroupID]
LEFT OUTER JOIN [dbo].[AccountSummary] AS [t6] ON [t6].[AccountSummaryID] =
[t5].[AccountSummaryID]
WHERE ([t1].[TransmittalEntityID] = @p0) AND ([t1].[DateRangeBeginTimeID] = @p1)
AND ([t1].[ScenarioID] = @p2) AND ([t6].[AccountSummaryID] = @p3)
Теперь действительно странной частью является то, что если я выполню этот SQL вManagement Studio возвращает 11 строк за 3 секунды, но генерирующий его запрос linq будет отключен через 30 секунд активности.
Задание параметра Take просто не имеет особого смысла.Я попал в какую-то ошибку?
Примечание. Время ожидания кода без параметра Take () истекает независимо от того, выполняю ли я его из своего приложения или Linqpad.Аналогично, как в приложении, так и в linqpad он работает нормально с параметром Take ().Кроме того, без отличительного он только возвращает 19 строк.