sql >> Database >  >> RDS >> Mysql

Kunnen we de LINQ-uitdrukkingsvolgorde regelen met Skip(), Take() en OrderBy()

Mijn tijdelijke oplossing

Ik heb dit probleem weten te omzeilen. Begrijp me hier niet verkeerd. Ik heb het probleem met voorrang nog niet opgelost, maar ik heb het verholpen.

Wat heb ik gedaan?

Dit is de code die ik heb gebruikt totdat ik een antwoord krijg van Devart . Als ze dit probleem niet kunnen oplossen, zal ik uiteindelijk deze code moeten gebruiken.

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

Allereerst krijg ik bestelde ID's van mijn entiteiten. Het verkrijgen van alleen ID's werkt goed, zelfs met een grotere set gegevens. MySql-query is vrij eenvoudig en presteert erg goed. In het tweede deel partitie ik deze ID's en gebruik ze om echte entiteitsinstanties te krijgen.

Als ik erover nadenk, zou dit zelfs beter moeten presteren dan de manier waarop ik het in het begin deed (zoals beschreven in mijn vraag), omdat het verkrijgen van het totale aantal veel sneller is vanwege de vereenvoudigde zoekopdracht. Het tweede deel lijkt praktisch erg op elkaar, behalve dat mijn entiteiten eerder door hun ID's worden geretourneerd in plaats van gepartitioneerd met Skip en Take ...

Hopelijk vindt iemand deze oplossing nuttig.



  1. Android haalt gegevens op uit de MySql-tabel

  2. Waarom vertelt MySQL Workbench me dat ik een puntkomma nodig heb?

  3. update database met checkbox

  4. Nieuwe MYSQL-installatie, toegang geweigerd voor gebruiker 'root'