sql >> Databáze >  >> RDS >> Mysql

Můžeme ovládat pořadí výrazů LINQ pomocí Skip(), Take() a OrderBy()

Moje náhradní řešení

Tento problém se mi podařilo obejít. Nechápejte mě tady špatně. Problém s prioritou jsem zatím nevyřešil, ale zmírnil jsem ho.

Co jsem udělal?

Toto je kód, který jsem používal, dokud jsem nedostal odpověď od Devart . Pokud nebudou schopni tento problém překonat, budu muset nakonec použít tento kód.

// 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();
}

Nejprve získávám objednaná ID mých subjektů. Získávání pouze ID je výkonné i s větší sadou dat. Dotaz MySql je poměrně jednoduchý a funguje opravdu dobře. Ve druhé části tato ID rozdělím a použiji je k získání skutečných instancí entit.

Když o tom přemýšlím, mělo by to fungovat ještě lépe, než jak jsem to dělal na začátku (jak je popsáno v mé otázce), protože získání celkového počtu je mnohem rychlejší díky zjednodušenému dotazu. Druhá část je prakticky velmi podobná, až na to, že mé entity jsou vráceny spíše podle jejich ID namísto rozdělení pomocí Skip a Take ...

Doufejme, že toto řešení může někomu pomoci.



  1. Laravel :Jak vzít posledních n (libovolný počet) řádků po seřazení ve vzestupném pořadí?

  2. Jak uložit LocalTime do hibernace

  3. Django Query, kde jedno pole je duplicitní a druhé odlišné

  4. SQL Server SELECT do existující tabulky