Quote Originariamente inviata da Veronica80 Visualizza il messaggio
Si ho appena iniziato a infilarci il naso ma ho già notato la potenza di LINQ e E. Frameworks (il metodo savechanges() che gestisce le transazioni gerarchicamente in automatico è stupendo) i quali snelliscono il codice in maniera veramente straordinaria.
Tieni conto che LINQ costituisce un linguaggio a parte, ovvero si tratta di un supporto per costruire espressioni che esula dall'utilizzo esclusivo con Entity Framework, ma si applica a prescindere su qualsiasi "enumerabile".

Poi, a seconda dell'oggetto di partenza (es. DbSet di EF, oppure una lista di oggetti, ecc.) che è quello a cui viene demandata l'esecuzione dell'espressione, si hanno diverse implementazioni (LINQ To SQL su ADO.NET, LINQ To Objects per liste/array/collezioni, LINQ To XML per file XML, LINQ To Entities per EF, ...) che permettono di interpretarla fattivamente e tradurla nell'implementazione opportuna che restituisce il dato desiderato.

Quote Originariamente inviata da Veronica80 Visualizza il messaggio
Anche io uso il metodo .toList() però in effetti non avevo contestualizzato il fatto che la mia variabile "lista" è solo un espressione e non un esecuzione!
E' un principio fondamentale da tenere ben presente, soprattutto per gli effetti collaterali che ne possono derivare, ma anche per i vantaggi (trovi tutto nell'articolo segnalato).

Quote Originariamente inviata da Veronica80 Visualizza il messaggio
Ti faccio una domanda preventiva:
Devo dunque trattare la variabile lista come se fosse una stringa? Compoenendola a mio piacimento cone la condizioni IF?
Diciamo "ni". Sicuramente non è una stringa, ma non va pensato come qualcosa progettato per accodarvi delle clausole.

Il principio è che una espressione LINQ parte da una enumerazione di qualcosa e permette di filtrarla (where), ordinarla order by, estrarre qualcosa di diverso o un elemento dell'insieme originale (select), ma solo nel momento in cui viene eseguita.

Ogni espressione LINQ quindi è anche automaticamente una nuova "enumerazione" sulla quale è possibile costruire un'altra espressione, che potrebbe un altro filtro ancora, proiettare qualcosa di diverso e così via.

Se una espressione LINQ viene usata come origine per basarvi sopra un'altra espressione, poi un'altra e un'altra ancora e così via, alla fine si ottiene una catena di elaborazioni che produrranno alla fine il risultato desiderato, con il vantaggio che l'effettiva esecuzione viene fatta una volta sola, alla fine, quando si chiama una delle funzioni di aggregazione (es. Sum, Max, ...) oppure una funzione che estrae una lista o un array dei valori (es. ToList, ToArray, ToDictionary, ...) oppure un solo elemento, come il primo (First), il primo o un valore di default (FirstOrDefault), l'ultimo (Last) e così via, oppure banalmente quando si inizia un ciclo sull'espressione.

Se il motore che riceve l'espressione in carico è abbastanza intelligente (e quello di EF generalmente lo è), l'espressione viene combinata e semplificata per essere eseguita nel modo più veloce possibile.

Quote Originariamente inviata da Veronica80 Visualizza il messaggio
Scaricherò anche LinqPad che sicuramente mi farà molto ma molto comodo!
Oltre ad essere comodo (a volte lo uso come sostituto di SQL Server Management Studio), ha proprio tutto quello che serve per analizzare le espressioni e vedere come LINQ si comporta, oltre a includere degli esempi e dei tutorial che fanno capire le potenzialità e i principi di funzionamento.

Ciao!