2012-10-22 17 views
5
ViewBag.EquipmentList = myInventoryEntities.p_Configurable_Equipment_Request_Select(Address_ID, false).Select(c => new { Value = c.Quantity + " " + c.Device_Name + " (s)", ID = c.Device_ID.ToString() }).ToList(); 

In Razor voglio fare quanto segueConte di System.Collections.Generic.List

@ViewBag.EquipmentList.Count 

Ma Conte è sempre == 1

so di poter scorrere in un foreach, ma preferirebbe un approccio più diretto.

Forse sono concettualmente fuori?

risposta

5

EDIT: Okay, ora sembra che tu abbia passato Count non esecuzione:

Ma Conte è sempre == 1

Suona come sei sempre recuperare una lista con esattamente una voce in. Se ciò è inaspettato, si dovrebbe guardare perché si ottiene solo una singola voce - iniziare con il debug nel codice ... questo non suona come un problema Razor a tutti.


Se il valore fosse davvero un List<T> per alcuni T, credo che dovrebbe andare bene. L'espressione ViewBag.EquipmentList.Count dovrebbe valutare dinamicamente in ogni punto.

In altre parole, se si sta realmente utilizzando il codice di assegnazione mostrato, dovrebbe essere ok.

Se, tuttavia, il valore è solo un'implementazione di IEnumerable<T> che non significa esporre una proprietà Count, allora avresti bisogno di utilizzare il metodo Enumerable.Count() estensione - e non è possibile utilizzare il normale "metodo di sintassi di estensione "con digitazione dinamica. Una semplice correzione sarebbe quella di utilizzare:

Enumerable.Count(ViewBag.EquipmentList) 

... che sarà ancora possibile utilizzare la tipizzazione dinamica per la argomento-Enumerable.Count, ma non dovrà trovare il metodo Count() come un metodo di estensione.

In alternativa, assicurarsi che il proprio valore sia effettivamente List<T>. Se in realtà è un array, dovresti essere in grado di modificare il codice per utilizzare invece la proprietà Length.

+0

buon occhio sull'errore di battitura, ma ancora lo stesso errore, l'errore di battitura solo esistente sul mio post – Pinch

+0

@Pinch: Beh, è ​​stato qualcosa * altro * nel tuo post non corretto? Stai * davvero * chiamando ToList? –

+0

:) Sì..ora va bene In realtà ... Ho appena notato @ ViewBag.EquipmentList.Count funziona ma è sempre = 1 – Pinch

5
@ViewBag.EquipmentListNI.Count() 
+0

scusa ma, Count 'non può essere utilizzato come metodo. – Pinch

+2

@Pinch: può essere utilizzato se si utilizza il metodo di estensione Linq. –

+0

+1 grazie mille! – Pinch