2009-08-18 6 views
1

Comment obtenir 5 enregistrements aléatoires d'une table LINQ to SQL [T]?Enregistrements LINQ to SQL aléatoires avec les clés primaires "int"

Tous les exemples que j'ai trouvé via Google utilise uniqueidentifier comme clé primaire

http://www.davidmuto.com/Blog.muto/View/random-records-with-linq-to-sql

Est-il possible de le faire lorsque la clé primaire est un entier auto-incrémentée?

Certains enregistrements peuvent également être supprimés, de sorte que le jeu d'ID min à max aura des trous.

Toute aide est grandement appréciée.

-CV

Répondre

1

Pour commencer, vous pouvez jeter un oeil à ce poste qui semble avoir un moyen de faire ce que vous cherchez: http://weblogs.asp.net/fmarguerie/archive/2008/01/10/randomizing-linq-to-sql-queries.aspx

détail de laisser reposer la solution qui utilise un utilisateur SQL fonction définie Le moyen le plus répandu de trier les enregistrements est pour utiliser la fonction NEWID SQL Server. C'est ce que cette solution utilise.

d'abord, créez la vue suivante:

CREATE VIEW RandomView AS SELECT NEWID() As ID Ensuite, créez la fonction suivante qui utilise la vue:

CREATE FONCTION GetNewId() RETURNS uniqueidentifier AS BEGIN RETOUR (SELECT ID dE RandomView) FIN

La vue est nécessaire parce que ce n'est pas possible d'utiliser directement NEWID dans un scalaire f onction.

Vous pouvez ensuite mapper la fonction définie par l'utilisateur GetNewId en utilisant LINQ à l'attribut de fonction SQL. Encore une fois, voir chapitre 8 pour les détails.

C'est tout! Vous pouvez maintenant écrire les requêtes LINQ comme d'habitude. Voici un exemple de choisir un objet au hasard:

outil var = db.Tools.OrderBy (t => db.GetNewId()) Premier()

Voici un autre exemple qui utilise GetNewId. pour trier les résultats au hasard:

outils var = de l'outil dans db.Tools
orderby sélectionnez tool.Name db.GetNewId();

Il y a aussi ce poste sur le SO: Random row from Linq to Sql