Losowanie obiektów z pewnego zakresu

Odpowiedz Nowy wątek
2015-02-07 10:45
0

Witajcie.

Wiem, że może temat dla Was bardzo trywialny ale zablokowałem się.

Mam tabele Nagrody, która zawiera kilka nagród.

W widoku podaję początek i koniec zakresu.
Np 2 i 4

Potem postem przekazuję te parametry do akcji.

Chciałbym aby z tej mojej dostępnej puli nagród wylosować jedną z podanego zakresu.

Zrobilem sobie metode do losowania:

public NagrodyModel LosujNagrodZPodanegoZakresu(int poczatek, int koniec)
        {
            // wszystkie nagrody z bazy
            var dostepneNagrody = Context.NagrodyModels.ToList();

            // ID dostępnych nagrod z bazy
            var nagrodyIds = dostepneNagrody.Select(n => n.ID);

            ViewBag.ad = nagrodyIds;
            return null;
        }

Jak to zrobić?


Pozostało 580 znaków

2015-02-07 10:54
0

Random.Next(Int32, Int32)

Pozostało 580 znaków

2015-02-07 11:09
var nagrody = Context.NagrodyModels.Where(n=> n.Id>poczatek && n.Id<koniec).ToLlist();
losowaNagroda = nagrody[Random.Next(nagrody.Length)];
Zrobiłem właśnie coś podobnego :) Ale dzięki :) - Odyn 2015-02-07 11:10
Wy serio pobieracie wszystkie rekordy z bazy, żeby wylosować ID jednego z nich? - somekind 2015-02-10 02:53
Proponujesz pobrać samo id czy jeszcze inaczej? - dam1an 2015-02-10 09:41
No właśnie masz jakieś lepsze rozwiązanie? Przy małej liczbie rekordów można śmiało pobrać wszystkie i potem losować :) - Odyn 2015-02-10 09:51

Pozostało 580 znaków

2015-02-10 10:18
0
SELECT F.id, F.value FROM [BlaBla].[dbo].[foo] F WHERE
    F.id = FLOOR(RAND() * (4 - 1) + 1);

Gdzie: 4 - element za ostatnim możliwym do wylosowania, 1 - pierwszy element możliwy do wylosowania. Ofc. zakładając, że te id nie mają dziur w sobie to to zadziała.

Jeśli jednak są dziury w id, to możesz użyć OFFSET/FETCH_NEXT, ewentualnie ROW_NUMBER().
Teraz sobie przepisz to na orma.

Pozostało 580 znaków

2015-02-10 10:39
0

Już wiem, w zasadzie to wystarczyło trochę pogoglować :P

var los = Context.NagrodyModels.Where(n=> n.Id>poczatek && n.Id<koniec)
                  .OrderBy(n=> SqlFunctions.Rand()).First(); // lub FirstOrDefault

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0