none
Combinaison OrderBy et Take avec SQLite : résultat non souhaité RRS feed

  • Question

  • Bonjour,

    J'utilise la dernière version d'Entity Framework Core, et de SQLite, et mon problème est le suivant :

    Je travaille sur un un DbSet<Film> et souhaite prendre 5 films puis les trier par date de sortie.

    Tout d'abord, si je prend les 5 premiers éléments avec Take :

    var films = DatabaseContext.Instance.Films
    .Take(5)

    J'obtiens : 

    -----------------------------------------------------------------------
     | FilmId | Title                               | ReleaseYear | Rating |
     -----------------------------------------------------------------------
     | 1      | Captain America: The Winter Soldier | 2014        | PG-13  |
     -----------------------------------------------------------------------
     | 2      | The Avengers                        | 2012        | PG-13  |
     -----------------------------------------------------------------------
     | 3      | Thor                                | 2011        | PG-13  |
     -----------------------------------------------------------------------
     | 4      | Avengers: Age of Ultron             | 2015        | PG-13  |
     -----------------------------------------------------------------------
     | 5      | Captain America: The First Avenger  | 2011        | PG-13  |
     -----------------------------------------------------------------------

    Mais en souhaitant trier ce sous ensemble avec Order by : 

    var films = DatabaseContext.Instance.Films
    .Take(5)    
    .OrderBy(f => f.ReleaseYear)


    J'obtiens le resultat suivant : 

    ----------------------------------------------------------------------------------
     | FilmId | Title                                          | ReleaseYear | Rating |
     ----------------------------------------------------------------------------------
     | 6      | Star Wars: Episode IV - A New Hope             | 1977        | PG     |
     ----------------------------------------------------------------------------------
     | 7      | Star Wars: Episode V - The Empire Strikes Back | 1980        | PG     |
     ----------------------------------------------------------------------------------
     | 8      | Star Wars: Episode VI - Return of the Jedi     | 1983        | PG     |
     ----------------------------------------------------------------------------------
     | 9      | Star Wars: Episode I - The Phantom Menace      | 1999        | PG     |
     ----------------------------------------------------------------------------------
     | 10     | Star Wars: Episode II - Attack of the Clones   | 2002        | PG     |
     ----------------------------------------------------------------------------------

    Or je m'attendais a avoir les films d'id [1, … , 5] triés. 

    Ici le tri est effectué en premier sur l'ensemble des films et ensuite sont pris les cinq premier films.
    Ce n'est pas du tout le résultat souhaité.

    S'agit t'il d'une particularité de SQLite ? et dois-je indiquer explicitement de trier les Id d'abord :

    var films = DatabaseContext.Instance.Films
                    .OrderBy(f => f.FilmId)
                    .Take(5)
                    .OrderBy(f => f.ReleaseYear)

    Resultat : 

    -----------------------------------------------------------------------
     | FilmId | Title                               | ReleaseYear | Rating |
     -----------------------------------------------------------------------
     | 3      | Thor                                | 2011        | PG-13  |
     -----------------------------------------------------------------------
     | 5      | Captain America: The First Avenger  | 2011        | PG-13  |
     -----------------------------------------------------------------------
     | 2      | The Avengers                        | 2012        | PG-13  |
     -----------------------------------------------------------------------
     | 1      | Captain America: The Winter Soldier | 2014        | PG-13  |
     -----------------------------------------------------------------------
     | 4      | Avengers: Age of Ultron             | 2015        | PG-13  |
     -----------------------------------------------------------------------

    Merci d'avance




    jeudi 1 novembre 2018 11:01