Creazione di una raccolta di SelectListItem con LINQ

Sto cercando di visualizzare un elenco a discesa di utenti a mio avviso. Ecco il codice che sto usando nel mio metodo di controllo:

var users = _usersRepository.Users.Select(u => new SelectListItem { Text = u.FirstName + " " + u.LastName, Value = u.UserID.ToString() } return View(new MyViewModel { Users = users }); 

Ottengo un errore nel tentativo di convertire UserID in una stringa:

LINQ to Entities non riconosce il metodo ‘System.String ToString ()’ e questo metodo non può essere tradotto in un’espressione di archivio.

Come creo una collezione di SelectListItem dalle mie quadro?

ToString() può essere utilizzato solo in Linq to Objects. Una soluzione semplice è inserire .ToList() come segue:

 var users = _usersRepository.Users.ToList().Select(u => new SelectListItem { Text = u.FirstName + " " + u.LastName, Value = u.UserID.ToString() }); return View(new MyViewModel { Users = users }); 

Ciò restituirà tutti gli utenti dalla tabella User. Se è ansible ridurre la quantità di utenti ottenuti dal database, la query sarà più efficiente, ad es

 var users = _usersRepository.Users.Where( u => .... ).ToList().Select(u => new SelectListItem { Text = u.FirstName + " " + u.LastName, Value = u.UserID.ToString() }); return View(new MyViewModel { Users = users }); 

Penso che tu stia cercando SqlFunctions

 using System.Data.Objects.SqlClient; var users = _usersRepository.Users.Select(u => new SelectListItem { Text = u.FirstName + " " + u.LastName, Value = SqlFunctions.StringConvert((double?)u.UserID) } return View(new MyViewModel { Users = users });