Avatar billede zentral Nybegynder
29. september 2008 - 10:04 Der er 7 kommentarer og
1 løsning

Find Random med LINQ

Hej Hej...

jeg har nogle problemer med at hente et tilfældigt produkt ud med.

database diagrammet kan ses her...
http://www.zentral.dk/diagram.gif

Sådan her ser den klasse ud jeg bruger til at hente alle ud med:

    public static IQueryable GetAllDrinks()
    {
        DataContactClassDataContext db = new DataContactClassDataContext();

        var result = from p in db.Drinks
                    orderby p.DrinkName
                    select new
                    {
                        drinkID = p.DrinkID,
                        drinkName = p.DrinkName,
                        drinkCat = p.DrinkType1.DrinkTypeName
                    };

        return result;
    }


Hvordan skal den så se ud hvis jeg kun vil hente 1, tilfældig hver gang jeg kalder metoden... ?
Avatar billede arne_v Ekspert
29. september 2008 - 13:53 #1
var result2 = result.OrderBy(o => rng.Next()).Take(1);
Avatar billede montago Praktikant
29. september 2008 - 14:53 #2
er der en fordel med OrderBy() i forhold til

var rand = result.Skip( rnd.next(0,result.Count-1) ).take(1)

-Count er ond
-Skip er ond

men set i forhold til OrderBy ??
Avatar billede arne_v Ekspert
29. september 2008 - 14:59 #3
Næppe. Jeg vil tro at Skip vil performe bedre end OrderBy. Men OrderBy er
lidt mere traditionel i forhold til hvordan man gør i SQL.
Avatar billede zentral Nybegynder
29. september 2008 - 17:17 #4
når jeg bruger dit script arne_v, så får jeg den samme ud hver gang ... post nr. 2 ud af 3 ....
Avatar billede arne_v Ekspert
29. september 2008 - 17:38 #5
Sært, men jeg må indrømme at jeg testede det kun med LINQ for objects ikke med
LINQ for SQL.

Så prøv montagos.
Avatar billede zentral Nybegynder
29. september 2008 - 18:08 #6
montagos... det virkede og du ska nok få point.
er det sån du vil forklare mig hvad der sker i dit stykke kode så jeg lige er med..
Avatar billede montago Praktikant
29. september 2008 - 20:12 #7
yes yes

var rand = result.Skip(          //Skip antal elementer på collection
    rnd.next(              // RND.next(min,max) hent random tal mellem min og max
        0,          // min
        result.Count-1 //max
    )
).take(1)                      //tag den første
Avatar billede montago Praktikant
29. september 2008 - 20:14 #8
dét jeg beder din collection om er:

1. vælg et random heltal mellem 0 og 'max antal elementer'
2. skip dette antal
3. pluk 1 element
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester