sprawdzanie czy istnieje w bazie

2017-03-08 15:37
0

Witam czy ktoś mógłby mi powiedzieć, czemu mi ten kod nie działa poprawnie?
Program się kompiluje, ale nie działa. Stworzyłem funkcje, która losuje jedną rzecz z bazy i umieszcza ten obiekt w 2 liscie, przy kolejnym wywołaniu tej funkcji sprawdza czy wylosowany obiekt istnieje w tej 2 liście, jeśli tak to losuje jeszcze raz.

IList AlreadyChosen = new List<IList>();
TABUEntities baza = new TABUEntities();

 public List<HASLA> RandomWords()
        {

            List<HASLA> dane = baza.HASLA.OrderBy(x => Guid.NewGuid()).Take(1).ToList();
            bool chose = AlreadyChosen.Contains(dane);
            if (chose)
            {
                RandomWords();
            }
            AlreadyChosen.Add(dane);
            return dane;      
        }

co tutaj jestźle?

Pozostało 580 znaków

2017-03-08 16:06
0

Przypisujesz do List<HASLA> dane nową referencje a metodą Contains sprawdzasz czy istnieje już w kolekcji taka referencja.

Pozostało 580 znaków

2017-03-08 16:11
śmieszek
1

Uzupełniając kolegę powyżej, ten kod:


baza.HASLA.OrderBy(x => Guid.NewGuid()).Take(1).ToList();

A dokładnie ToList(); generuje zawsze nową listę (czyli mam referencje na nowy obiekt). Nawiasem mówiąc warto zainteresować się jak działa LINQ w szczególności w kwestii lazy-evaluation.

Pozostało 580 znaków

2017-03-08 17:51
0

Dodatkowo to jaki jest sens tworzyć jedno elementowe listy i trzymać je w liście ?

Pozostało 580 znaków

2017-03-09 00:02
0

podpinam później tą listę poprzez Binding do Widoku.

Pozostało 580 znaków

2017-03-09 09:28
0

Ale to serio potrzebujesz listy jednoelementowych list? Coś tu robisz źle.
Co do pytania. Jeśli to jest tak robione (źle), to powinieneś spróbować napisać nową klasę, dziedziczącą po List<hasla>. Następnie w niej, przesłonić metody: Equals, operator == i GetHashCode. Może to dałoby radę.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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