Hajd' da napisem i malo detalja.. Mozda bude od koristi, tebi ili nekom drugom.
Samo cu prethodno pojednostaviti primer (manje kucanja i lakse za kapiranje) tako sto cu izbaciti join i pretpostaviti da je IsApproved property klase User.
U tom slucaju bi pocetni primer bio:
Code:
var lista = new SelectList(from a in baza_kon.Users where u.IsApproved == true select a, "UserName", "UserName");
Ovo se prilikom kompajliranja prevodi na sledeci oblik:
Code:
SelectList lista = new SelectList(baza_kon.Users.Where(u => u.IsApproved), "UserName", "UserName");
(Select deo je nebitan posto se selektuje ceo User objekat)
E sad, SelectList trazi IEnumerable u konstruktoru.
baza_kon.Users.Where(...) vraca IQuerable<User> pri cemu IQuerable<T> nasledjuje IEnumerable<T> (koji nasledjuje IEnumerable).
Zbog toga se taj rezultat moze proslediti direktno konstruktoru.
U onom mom primeru resenja dobijeni rezultat konverujemo u List<User> koji podrzava dodavanje elemenata i onda mu jednostavno dodajemo nove User objekte kao sto je prikazano.
Posto List<T> implementira IEnumerable<T>, ta lista se moze direktno dati SelectList konstruktoru sto smo na kraju i uradili.
Naravno, ovo nije jedino resenje, moze se koristiti Union ili Concat u prvobitnom query-u.
Inace, predlazem koriscenje extension metoda direktno umesto preko sql-like query-a, lakse je za razumevanje a i kod je kompaktniji a i dalje citljiv (mozda cak i citljiviji).