J'utilise le code suivant pour interroger ma base de données:lignes en double lors de l'utilisation orderby, Skip() et Take() avec LINQ
private const int PAGE_SIZE = 10;
public static IList<Image> GetTopImagesForUser(String connectionString, int userID, int page)
{
dbDataContext db = new dbDataContext(connectionString);
var images = (from p in db.Images
where (p.SubmitterUserIndex == userID &&
p.URL != "none" &&
p.ThumbURL != "none")
orderby p.Rep descending
select p).Skip(page * PAGE_SIZE).Take(PAGE_SIZE);
/* snip */
return topImages;
}
Si j'appelle ce code avec une page de 0, tout fonctionne comme je le veux - je reçois une liste bien ordonnée, 10 résultats, tout est correct.
Si j'appelle ce code avec page de 1, cependant, les lignes qui étaient dans la page 0 finissent dans la page 1. Je ne peux même pas commencer à comprendre pourquoi. J'ai vérifié ma base de données pour les lignes en double, aucune. J'ai vérifié pour vous assurer que URL de chaque ligne et ThumbURL ne sont pas "aucun". Ce n'est pas le problème non plus. J'ai vérifié pour m'assurer que page est ce que je m'attends à ce que j'appelle quand j'appelle cette méthode, et c'est toujours ce que je m'attends à ce qu'il soit.
Ce qui me déconcerte est vraiment que la méthode suivante, qui diffère de la première méthode que dans le orderby clause, fonctionne complètement comme prévu.
public static IList<Image> GetAllImagesForUser(String connectionString, int userID, int page)
{
dbDataContext db = new dbDataContext(connectionString);
var images = (from p in db.Images
where (p.SubmitterUserIndex == userID &&
p.URL != "none" &&
p.ThumbURL != "none")
orderby p.SubmitTime descending
select p).Skip(page * PAGE_SIZE).Take(PAGE_SIZE);
/* snip */
return allImages;
}
Est-ce que quelqu'un a rencontré quelque chose comme ça? Existe-t-il une autre forme que ma requête devrait prendre pour faire ce que je veux qu'elle fasse? Je ne suis pas sûr de ce que je pourrais manquer.
C'est une bonne question. Lorsque vous rencontrez ce problème pour la première fois, c'est vraiment ahurissant. – DOK
C'était ahurissant! C'est beaucoup plus logique maintenant! Merci :-) –