Losowanie obiektów z pewnego zakresu

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ć?

0

Random.Next(Int32, Int32)

2
var nagrody = Context.NagrodyModels.Where(n=> n.Id>poczatek && n.Id<koniec).ToLlist();
losowaNagroda = nagrody[Random.Next(nagrody.Length)];
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.

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

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