Mam następujący kod do wyszukiwania pełnotekstowego. Tworzy zapytanie, pobiera całkowitą liczbę wierszy zwróconych przez to zapytanie, a następnie pobiera rzeczywiste wiersze tylko dla bieżącej strony.Wykonanie dwóch zapytań w jednym cyklu podróży do bazy danych
// Create IQueryable
var query = from a in ArticleServerContext.Set<Article>()
where a.Approved
orderby a.UtcDate descending
select a;
// Get total rows (needed for pagination logic)
int totalRows = query.Count()
// Get rows for current page
query = query.Skip((CurrentPage - 1) * RowsPerPage).Take(RowsPerPage);
To działa dobrze, ale wymaga dwóch podróży w obie strony do bazy danych. Czy w celu zoptymalizowania kodu istnieje jakiś sposób na przerobienie tego zapytania, aby miał on tylko jedną podróż w obie strony do bazy danych?
Moim zdaniem Nie. Jeśli nie chcesz oczywiście przechowywać wszystkich wierszy w pamięci. –
Nie sądzę, żebyś mógł to zrobić podczas jednej podróży w obie strony, tylko sposób, w jaki mogę myśleć, to przemyślenie strony do pracy bez konieczności uzyskania całkowitej liczby. – JanR
Całkowicie zgadzam się z @JanR. Jedynym sposobem na osiągnięcie tego jest użycie paginacji w jednym zapytaniu. Jeśli zapytanie wynikowe zwróci 'null', to nie ma danych do wyświetlenia. –