I ', avvicinandomi a EF6. Ho capito che, se voglio un singolo record, posso usare il metodo First()
(utilizzabile anche come un "get", penso).
Ma cosa succede se voglio una collezione di dischi dal mio tavolo? Voglio dire, se il risultato della query può avere una cardinalità da 0 a N ... cosa devo fare?
Esempio sciocco:
Tabella dei nomi: SomeTable
ID NAME SOMEATTR
1 A YELLOW
2 B RED
3 C YELLOW
4 D YELLOW
5 E BLUE
...
Come posso ottenere tutti i record in cui someAttr è "giallo"?
usando linq & C #
private readonly myEntities db = new myEntities()
public list<SomeTable> MyRecords()
{
return res = db.SomeTables.where(o => o.SOMEATTR == "YELLOW").ToList()
}
Una volta ottenuta la query di Linq ...
var query = (from ... in ... where ... select ...);
Oppure, per il tuo esempio specifico:
var query = (from r in dbContext.MyTable where (r.someAttr == "YELLOW") select r);
Puoi semplicemente iterare su di esso usando foreach
che lo farà eseguire una volta e poi produrre i risultati ...
foreach (var r in query)
{
}
... o chiama ToList()
( http://msdn.microsoft.com/en-us/library/vstudio/bb342261(v=vs.100).aspx ) se vuoi acquisire una lista che può, in seguito, essere passato in giro, manipolato o esaminato molte volte. (Questo elenco è essenzialmente disconnesso dal server dopo che è stato restituito.)
var list = query.ToList()
... o usarlo per costruire una collezione come un HashSet<T>
( http://msdn.microsoft.com/en-us/library/bb301504(v=vs.110).aspx )
var set = new HashSet<T>(query)
Ognuna di queste causerà l'esecuzione sul server, solo una volta, ed elaborerà i risultati.
Dopo tutto, la query stessa è IEnumerable
. È anche IQueryable
modo da poterlo manipolare ulteriormente e quindi enumerare i risultati, come ...
var sortedList = query.OrderBy(...).ToList()