sql >> Database teknologi >  >> RDS >> Mysql

Kan vi styre LINQ-udtryksrækkefølgen med Skip(), Take() og OrderBy()

Min løsning

Det er lykkedes mig at omgå dette problem. Misforstå mig ikke her. Jeg har ikke løst spørgsmålet om forrang endnu, men jeg har afhjulpet det.

Hvad gjorde jeg?

Dette er den kode, jeg har brugt, indtil jeg får et svar fra Devart . Hvis de ikke vil være i stand til at overvinde dette problem, bliver jeg nødt til at bruge denne kode til sidst.

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

Først og fremmest får jeg bestilte ID'er for mine enheder. Det er godt at få kun ID'er, selv med større datasæt. MySql-forespørgsel er ret enkel og fungerer rigtig godt. I den anden del partitionerer jeg disse ID'er og bruger dem til at få faktiske entitetsforekomster.

Når man tænker på det, burde dette fungere endnu bedre end den måde, jeg gjorde det i begyndelsen (som beskrevet i mit spørgsmål), fordi det er meget meget hurtigere at få det samlede antal på grund af forenklet forespørgsel. Den anden del er praktisk talt meget ens, bortset fra at mine entiteter returneres snarere af deres ID'er i stedet for opdelt ved hjælp af Skip og Take ...

Forhåbentlig kan nogen finde denne løsning nyttig.



  1. Hvordan ville jeg bruge ON DUPLICATE KEY UPDATE i min CodeIgniter-model?

  2. SQL OVER()-sætningen - hvornår og hvorfor er den nyttig?

  3. MONTHS_BETWEEN() Funktion i Oracle

  4. Swift httppost-data indsættes ikke i MySQL-databasen