sql >> Databasteknik >  >> RDS >> Mysql

Kan vi styra LINQ-uttrycksordningen med Skip(), Take() och OrderBy()

Min lösning

Jag har lyckats lösa det här problemet. Missförstå mig inte här. Jag har inte löst prioritetsproblemet än, men jag har åtgärdat det.

Vad gjorde jag?

Det här är koden jag har använt tills jag får svar från Devart . Om de inte kommer att kunna lösa det här problemet måste jag använda den här koden till slut.

// 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 och främst får jag beställda ID för mina enheter. Att bara få ID:n fungerar bra även med en större uppsättning data. MySql-frågan är ganska enkel och fungerar riktigt bra. I den andra delen partitionerar jag dessa ID:n och använder dem för att få faktiska entitetsinstanser.

Med tanke på det borde det här fungera ännu bättre än hur jag gjorde det i början (som beskrivits i min fråga), eftersom att få det totala antalet är mycket mycket snabbare på grund av förenklad fråga. Den andra delen är praktiskt taget väldigt lik, förutom att mina enheter returneras snarare av deras ID istället för att delas upp med Skip och Take ...

Förhoppningsvis kan någon hitta den här lösningen till hjälp.



  1. Det effektivaste sättet att lagra IP-adress i MySQL

  2. optimera mysql-frågan med LIKE-operatorn för 10k poster

  3. Ansluter Oracle till Amazon Aurora

  4. JSON_VALUE() i MySQL