2013-03-22 14 views
42

Sto provando a selezionare negozi utilizzando una funzione lambda e convertendo il risultato in un oggetto SelectListItem in modo che possa renderlo. Tuttavia si sta gettando un "tipo di espressione in Seleziona la clausola non è corretto" Errore:Come utilizzare Lambda in LINQ select statement

IEnumerable<SelectListItem> stores = 
    from store in database.Stores 
    where store.CompanyID == curCompany.ID 
    select (s => new SelectListItem { Value = s.ID, Text = s.Name}); 
ViewBag.storeSelector = stores; 

Che cosa sto facendo di sbagliato?

EDIT:

Inoltre, come faccio a convertire Int a stringa in questa situazione? La seguente non funziona:

select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name}); 
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name}); 

EDIT 2:

Figura l'Int String conversione. È così tipico di Microsoft dimenticare di includere una funzione di conversione int2string. Qui è l'attuale soluzione tutti utilizzano, con la sintassi completamente funzionante:

select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name }; 

chiamare questa situazione assurda è un eufemismo.

risposta

90

utilizzando LINQ query di espressione

IEnumerable<SelectListItem> stores = 
     from store in database.Stores 
     where store.CompanyID == curCompany.ID 
     select new SelectListItem { Value = store.Name, Text = store.ID }; 

ViewBag.storeSelector = stores; 

o utilizzando metodi di estensione LINQ con Espressioni lambda

IEnumerable<SelectListItem> stores = database.Stores 
     .Where(store => store.CompanyID == curCompany.ID) 
     .Select(store => new SelectListItem { Value = store.Name, Text = store.ID }); 

ViewBag.storeSelector = stores; 
+1

Potete per favore mi aiuti a convertire int a string? Non sembra esserci alcun modo per LINQ to Entity per convertire int in stringa. – Bill

+0

@YongkeBillYu Intendi come ad esempio '5.ToString()'? –

+0

Sì, a quanto pare non funziona. – Bill

14

Sembra che si stia cercando di combinare la sintassi delle espressioni di query e la sintassi di espressione "normale" lambda. È possibile utilizzare:

IEnumerable<SelectListItem> stores = 
     from store in database.Stores 
     where store.CompanyID == curCompany.ID 
     select new SelectListItem { Value = store.Name, Text = store.ID}; 
ViewBag.storeSelector = stores; 

Oppure:

IEnumerable<SelectListItem> stores = database.Stores 
     .Where(store => store.CompanyID == curCompany.ID) 
     .Select(s => new SelectListItem { Value = s.Name, Text = s.ID}); 
ViewBag.storeSelector = stores; 

Non è possibile combinare i due, come si sta cercando di.

14

Perché non utilizzare solo la sintassi Lambda?

database.Stores.Where(s => s.CompanyID == curCompany.ID) 
       .Select(s => new SelectListItem 
        { 
         Value = s.Name, 
         Text = s.ID 
        });