2009-09-17 11 views
0

Je ne sais pas s'il y a un moyen facile de le faire, mais au fond ce que je voudrais faire est:ASP.NET MVC - Comment obtenir des enregistrements aléatoires du modèle?

var highlights = db.Banners.Where(h => h.Category == "highlight").ToList().GetRange(0,4); 

Je possède ce modèle bannières où j'ai quelques faits saillants mais je voudrais simplement récupérer 4 mises en évidence aléatoires chaque fois dans un ordre différent.

Donc le code que j'utilise vient de récupérer une plage de [0..4] met en évidence et si vous avez moins de 4, il renvoie une erreur, et ils ne sont pas randomisés.

Des idées sur comment pourrais-je le faire facilement?

Le résultat que je voudrais avoir est une Liste < Bannière > pour passer à la vue, mais chaque fois avec un ordre différent comme:

[1,3,4,2] || [2,1,4,3] || [12,32,15,3]

Je pense que ce qu'il :)

Merci beaucoup

Répondre

0

Here est un exemple d'échantillonnage Random LINQ sur codeproject

+0

-1, le code lié à des extraits l'ensemble IEnumerable dans une première liste - cela signifie charger la totalité de la table de DB en mémoire Afin de choisir 4 aléatoires. – orip

+0

A la réflexion, il charge de toute façon tous les faits saillants en mémoire. Je n'arrive pas à annuler le '-1', désolé. – orip

+0

C'est très bon Dan! Je suis d'accord avec orip, mais le fait est qu'au moins pour l'instant ça marche plutôt bien puisque j'ai juste quelques disques dans la base de données ce ne sera pas un problème. – zanona

3

Pour RANDOMIZE bannières et obtenir quatre premiers ou moins, vous pouvez le faire:

Random r = new Random(DateTime.Now.Ticks); 

var highlights = db.Banners.Where(h => h.Category == "highlight"). 
    OrderBy(h => r.Next()).Take(4) 
+0

C'est bien Alexander, merci beaucoup. mais le problème ici est que l'ordre est toujours le même comme [2,3,4,5] || [1,2,3,4] Je pense que dans mon cas, il serait bon de les avoir différents et mélangés à chaque fois. :) – zanona

+0

Eh bien, vous devriez utiliser une graine aléatoire basée sur le minuteur lors de la création d'un objet aléatoire. –

+0

J'ai changé le code un peu. Vérifie ça. –