EF Premier Code: Comment obtenir des lignes aléatoires
Comment puis-je construire une requête où je voudrais récupérer les lignes aléatoires?
Si je devais l'écrire en SQL, puis je voudrais mettre un order by sur newid() et coupez-n nombre de lignes à partir du haut. De toute façon pour ce faire, en EF premier code?
J'ai essayé de créer une requête qui utilise la fonction newid() et de l'exécuter à l'aide de DbSet.SqlQuery(). alors qu'il travaille, ce n'est pas le plus propre de solutions.
Aussi, essayé de récupérer toutes les lignes et en les triant par un nouveau guid. Bien que le nombre de lignes sont assez petits, ce n'est pas une bonne solution.
Des idées?
- Voir stackoverflow.com/questions/648196/random-row-from-linq-to-sql/...
- double possible de Linq to entities, ordre aléatoire
Vous devez vous connecter pour publier un commentaire.
Appelez simplement:
OrderBy
assume la fonction de classement pour être stable, ce qui n'est pas le cas avec un générateur aléatoire. Linq to entities traduire cela en une requête sql qui peut obtenir différentes classement pour la même entité (dès que vos requêtes de l'utilisationInclude
). Ensuite, il provoque l'entité dupliquée dans la liste des résultats.Guid.NewGuid()
(sens, LinqToSql ou tout ce qui tourne dansNEWID()
mais personne ne programmé le même pour Oracle).De la comparaison de deux options:
Saut(nombre aléatoire de lignes)
Méthode
SQL généré
Guid
Méthode
SQL généré
OrderBy(o => o.ID).Skip(skip).Take(5)
ne sera pas vraiment aléatoire, ce qui peut devenir un goulot d'étranglement dans la performance..First()
". J'ai présenté une comparaison entre quelques autres réponses que j'avais vu qui n'apparaissent pas plus, donc, votre point est doublement validé. Mais leNewGuid
solution de ne pas avoir le problème que vous décrivez.