2 messaggi dal 07 novembre 2012
ciao a tutti! da qualche giorno mi sono avventurata nel mondo di linq e non riesco a muovermi in alcune cose....
Una volta fatta una query del tipo
var query = from a in db.animali
where a.id>5 || a.id<20
select a

come faccio trattare i risultati della query? ovvero,dove sono "salvati"? immagino dentro un array ma dove?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, benvenuta nel forum!

Nel momento in cui assegni una query LINQ alla tua variabile query, i risultati non esistono ancora perché il database non è ancora stato interrogato.
In LINQ esiste il concetto di deferred execution (esecuzione differita) secondo il quale una query non viene eseguita subito, ma solo quando la "consumi". Cioè, la tua variabile query non contiene già i risultati ma contiene solo un'espressione che verrà valutata ed eseguita quando ne avrai effettivamente bisogno.
E' importante conoscere questo fatto perché altrimenti potresti incappare in problemi prestazionali come indicato qui:
http://www.html.it/articoli/linq-e-la-trappola-della-deferred-execution-1/

Fatta questa premessa, posso dirti cosa vuol dire "consumare" una query LINQ. Vuol dire semplicemente iterarla con un foreach, oppure trasformarla in lista grazie al metodo .ToList(). Ecco due esempi che mi permettono di trattare i risultati della query:

//qui definisco la query
var query = from a in db.animali
where a.id>5 || a.id<20
select a

//è solo a questo punto che il database viene interrogato,
//perché iterando la query ho manifestato la mia intenzione di voler leggere i risultati
foreach (var animale in query){
  Response.Write(animale.Nome);
}

Oppure puoi usare l'extension method .ToList()
//qui definisco la query
var query = from a in db.animali
where a.id>5 || a.id<20
select a
//qui ottengo i risultati. E' qui che il database verrà interrogato.
//Usando il .ToList() posso dire di aver "congelato" la lista.
//Cioè, se anche i dati dovessero cambiare nel database, la mia
//lista resterà immutata ogni volta che la leggo.
var listaRisultati = query.ToList();


ciao.
Modificato da BrightSoul il 07 novembre 2012 23.30 -

Enjoy learning and just keep making
2 messaggi dal 07 novembre 2012
hai ragione.... ho capito... grazie mille!!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.