2009-07-02 12 views
5

Dopo aver lavorato in MVC per alcuni mesi, sono tornato in un'applicazione WebForms 3.5 precedentemente scritta e sto cercando di sistemare quello che posso con ciò che ho imparato.Supporto Linq Lamba in WebForm ASCX

Parte di questo è il concetto di "modello fortemente caratterizzato con una vista parziale" che è incredibilmente fantastico. Ereditando il mio controllo personalizzato "ListTemplate", posso quindi utilizzare il relativo metodo getModel() per ottenere qualcosa di simile a questo:

<% List<Models.CaseStudy> model = GetModel<Models.CaseStudy>(); %> 

posso quindi eseguire un foreach sopra il modello, e tutto è felice. Tuttavia, ho voluto fare un raggruppamento così ho aggiunto i riferimenti a:

Poi, con un po 'meno-che-ideale della sintassi, provato questo:

<% IEnumerable<IGrouping<string, Models.CaseStudy>> model = GetModel<Models.CaseStudy>().GroupBy(e => e.Client.Name); %> 

Ma no! "Messaggio di errore del compilatore: CS1525: termine di espressione non valido '>'" - e sembra essere il lambda in difetto. Non funziona se inserisco anche GroupBy() nei parametri foreach.

C'è un modo per far funzionare lambdas all'interno dei file ASCX?

risposta

5

In base al messaggio di errore, il mio primo istinto sarebbe quello di utilizzare il compilatore C# 2.0.

Non so quale sia il tipo di ritorno di GetModel<T>. Ma anche se si tratta di un metodo vuoto, l'espressione lambda effettiva è un costrutto sintattico valido. Dovrebbe produrre un errore di risoluzione di sovraccarico, non un errore di analisi.

Tuttavia questo non è il caso nel compilatore C# 2.0. Sarebbe un costrutto sintattico non valido e produrrebbe quel messaggio di errore.

È possibile verificare che si stia utilizzando la versione corretta del compilatore C#?

+0

Ah, si dice: Informazioni sulla versione: Microsoft .NET Framework Versione: 2.0.50727.3053; Versione ASP.NET: 2.0.50727.3053. Come posso specificare la v3.5 e perché i file ASCX dovrebbero essere elaborati in modo diverso dal resto del mio sito (che è sicuramente v3.5 come impostato come framework di destinazione nel riquadro delle proprietà del progetto web)? – tags2k

+0

Per inciso, il tipo di reso di GetModel è List tags2k

+1

Ordinato ora - è strano. Configura un nuovo progetto 3.5 per confrontare i file web.config e per qualche motivo la sezione system.codedom> compilers era vuota dal mio altro progetto! Mi chiedo quanto sia passato così! – tags2k