Я сталкиваюсь с странной проблемой с EF Core 8.017. < /p>
У меня есть запрос, который ищет таблицу метаданных документов. Текст документа - это столбец с полным текстовым каталогом, который запрашивается с использованием метода ef.functions.contains .
Когда я выполняю этот запрос, используя Skip //
, это занимает немного времени, но в конечном итоге возвращает набор результатов.
Я могу отлаживать SQL, и когда я запускаю его непосредственно в SSM, запрос требует менее чем секунду.
Я сталкиваюсь с странной проблемой с EF Core 8.017. < /p> У меня есть запрос, который ищет таблицу метаданных документов. Текст документа - это столбец с полным текстовым каталогом, который запрашивается с использованием метода ef.functions.contains . Когда я выполняю этот запрос, используя Skip //[code]Take[/code], Query Times Out. Когда я выполняю этот запрос без Skip /[code]Take[/code], это занимает немного времени, но в конечном итоге возвращает набор результатов. Я могу отлаживать SQL, и когда я запускаю его непосредственно в SSM, запрос требует менее чем секунду.[code]DocumentRepository.cs[/code]: [code]var documents = _context.Document .Include(d => d.DocumentType).AsSplitQuery().AsNoTracking() .Include(d => d.DocumentStatus).AsSplitQuery().AsNoTracking() .Include(d => d.OriginationType).AsSplitQuery().AsNoTracking() .Where(d => d.DeleteDate == null) .AsNoTracking() .AsQueryable();
if (!string.IsNullOrEmpty(documentSearchParams.DocumentText)) { documents = documents.Where(d => EF.Functions.Contains(d.DocumentText, searchCondition.ToString())); }
if (!string.IsNullOrEmpty(documentSearchParams.DocumentTitle)) { documents = documents.Where(d => d.Title.Contains(documentSearchParams.DocumentTitle)); }
// and adding other search parameters
// SET SORT ORDER documents = documents.OrderBy(d => d.CreateDate);
return new PagedList(items, count, pageNumber, pageSize); } < /code> Debugging the resulting SQL query: DECLARE @__8__locals1_documentSearchParams_DocumentText_0_contains nvarchar(4000) = N'%test%'; DECLARE @__Trim_1_contains nvarchar(4000) = N'%test%'; DECLARE @__ToString_3 nvarchar(4000) = N'"*test*"'; DECLARE @__p_4 int = 0; DECLARE @__p_5 int = 3;
SELECT [t].[DocumentId], [t].[PublicationDate], [t].[Title], [DocumentNumber], [t].[Author], [d0].[DocumentTypeId], [d0].[Code], [d0].[CreateDate], [d0].[CreatedPersonId], [d0].[DeleteDate], [d0].[DeletedPersonId], [d0].[IsActive], [d0].[Name], [d0].[SortOrder], [d0].[UpdateDate], [d0].[UpdatedPersonId], [t].[DocumentTypeId], [d1].[DocumentStatusId], [d1].[Description], [d1].[SortOrder], [d1].[StatusCode], [t].[DocumentStatusId], [t].[Summary], [t].[Keywords], [t].[FileName], [t].[MissionAreaId], [p].[PersonId], [p0].[PersonId], [d3].[DocumentId], [d3].[PersonId], [p].[DomainName], [p].[Email], [p].[FirstName], [p].[LastName], [p].[ObjectName], [t].[CreatedPersonId], [t].[CreateDate], [t].[UpdateDate], [t].[UpdatedPersonId], [p0].[DomainName], [p0].[Email], [p0].[FirstName], [p0].[LastName], [p0].[ObjectName] FROM ( SELECT [d].[DocumentId], [d].[Author], [d].[AuthorIdList], [d].[Budget], [d].[ClassificationTypeId], [d].[ClassifiedTitle], [d].[CreateDate], [d].[CreatedPersonId], [d].[DocumentNumber], [d].[DocumentStatusId], [d].[DocumentTypeId], [d].[FileName], [d].[IsProtected], [d].[Keywords], [d].[MissionAreaId], [d].[OriginatingGroup], [d].[PublicationDate], [d].[ReviewId], [d].[SortingTitle], [d].[Summary], [d].[Title], [d].[UpdateDate], [d].[UpdatedPersonId] FROM [Document] AS [d] WHERE [d].[Title] LIKE @__8__locals1_documentSearchParams_DocumentText_0_contains ESCAPE N'\' OR [d].[DocumentNumber] LIKE @__Trim_1_contains ESCAPE N'\' OR CONTAINS([d].[DocumentText], @__ToString_3) OR LOWER([d].[Summary]) LIKE @__8__locals1_documentSearchParams_DocumentText_0_contains ESCAPE N'\' OR [d].[Author] LIKE @__8__locals1_documentSearchParams_DocumentText_0_contains ESCAPE N'\' OR [d].[Title] LIKE @__8__locals1_documentSearchParams_DocumentText_0_contains ESCAPE N'\' ORDER BY [d].[PublicationDate] DESC OFFSET @__p_4 ROWS FETCH NEXT @__p_5 ROWS ONLY ) AS [t] LEFT JOIN [DocumentType] AS [d0] ON [t].[DocumentTypeId] = [d0].[DocumentTypeId] LEFT JOIN [DocumentStatus] AS [d1] ON [t].[DocumentStatusId] = [d1].[DocumentStatusId] INNER JOIN [Person] AS [p] ON [t].[CreatedPersonId] = [p].[PersonId] INNER JOIN [Person] AS [p0] ON [t].[UpdatedPersonId] = [p0].[PersonId] LEFT JOIN [DocumentPerson] AS [d3] ON [t].[DocumentId] = [d3].[DocumentId] ORDER BY [t].[PublicationDate] DESC, [t].[DocumentId], [d0].[DocumentTypeId], [d1].[DocumentStatusId], [p].[PersonId], [p0].[PersonId], [d3].[DocumentId], [d3].[PersonId] < /code> Any thoughts as to why the EF.Function.Contains[/code] в запросе вместе с Skip и Take вызывает тайм -аут (около 30 секунд), при отладке запрос в SSM займет только 1 секунду, чтобы закончить?
Мне нужно запросить записи из базы данных DB2 с помощью LINQ. У меня есть объекты, созданные на основе схемы БД, и я пытаюсь выполнить запрос LINQ с помощью Skip and Take. Базовая таблица содержит около 25 столбцов и, возможно, миллион записей....
Поиск альтернативных функций для функций Пропустить и Взять
1 из ссылки гласит: Каждый раз, когда вы вызываете Skip(), ему придется выполнять итерацию . вы собираете с самого начала, чтобы пропустить необходимое количество элементов, что дает цикл...