Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy możemy kontrolować kolejność wyrażeń LINQ za pomocą Skip(), Take() i OrderBy()

Moje rozwiązanie obejściowe

Udało mi się obejść ten problem. Nie zrozum mnie źle. Jak dotąd nie rozwiązałem problemu pierwszeństwa, ale udało mi się go złagodzić.

Co zrobiłem?

To jest kod, którego używałem, dopóki nie otrzymałem odpowiedzi od Devart . Jeśli nie będą w stanie rozwiązać tego problemu, będę musiał w końcu użyć tego kodu.

// get ordered list of IDs
List<int> ids = ctx.MyEntitySet
    .Include(/* Related entity set that is needed in where clause */)
    .Where(/* filter */)
    .OrderByDescending(e => e.ChangedDate)
    .Select(e => e.Id)
    .ToList();

// get total count
int total = ids.Count;

if (total > 0)
{
    // get a single page of results
    List<MyEntity> result = ctx.MyEntitySet
        .Include(/* related entity set (as described above) */)
        .Include(/* additional entity set that's neede in end results */)
        .Where(string.Format("it.Id in {{{0}}}", string.Join(",", ids.ConvertAll(id => id.ToString()).Skip(pageSize * currentPageIndex).Take(pageSize).ToArray())))
        .OrderByDescending(e => e.ChangedOn)
        .ToList();
}

Przede wszystkim otrzymuję zamówione identyfikatory moich podmiotów. Pobieranie samych identyfikatorów jest skuteczne nawet przy większym zestawie danych. Zapytanie MySql jest dość proste i działa naprawdę dobrze. W drugiej części podzielę te identyfikatory na partycje i użyję ich do uzyskania rzeczywistych instancji encji.

Myśląc o tym, powinno to działać nawet lepiej niż sposób, w jaki robiłem to na początku (jak opisano w moim pytaniu), ponieważ uzyskanie całkowitej liczby jest znacznie szybsze dzięki uproszczonemu zapytaniu. Druga część jest praktycznie bardzo podobna, z wyjątkiem tego, że moje encje są zwracane raczej przez ich identyfikatory, a nie partycjonowane za pomocą Skip i Take ...

Mam nadzieję, że ktoś może uznać to rozwiązanie za pomocne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamic Linq nie działa podczas używania Zawiera przeciwko Int Field

  2. Nieznany błąd:MySQLTransactionRollbackException 1213

  3. Dodawanie czasu w PHP

  4. mysqldump Błąd 1045 Odmowa dostępu pomimo poprawnych haseł itp

  5. Sposoby na uniknięcie braku synchronizacji poleceń MySQLdb; nie możesz teraz uruchomić tego polecenia (2014) wyjątek