Attualmente sto cercando di capire alcuni dei fondamenti con LINQ. Sto usando LINQPad per interrogare l'origine OData di Netflix.Query lambda LINQ 'select' non funziona con oData
io non riesco a selezionare singole proprietà quando si utilizza una query lambda - la query di comprensione funziona perfettamente. Ho trovato uno snippet di codice che esegue una query più complessa utilizzando lambdas sul sorgente NetDlix oData e sembra funzionare bene per restituire una proprietà dell'entità.
// works fine
var compQuery = from t in Titles
where t.ReleaseYear == 2007
select new { t.Name };
compQuery.Dump();
// fails: "Can only specify query options (orderby, where, take, skip) after last navigation."
var lambdaQuery = Titles
.Where(t => t.ReleaseYear == 2007)
.Select(t => t.Name);
lambdaQuery.Dump();
// works fine - found on SO.
var lambdaQuery2 = People
.Expand("TitlesActedIn")
.Where(p => p.Name == "George Lucas")
.First()
.TitlesActedIn.Select(t => t.ShortName);
lambdaQuery2.Dump();
Qualcuno potrebbe far luce sul motivo per cui la query base lambda non riesce quando gli viene chiesto di restituire una proprietà?
ahhh, l'ho provato ora e funziona! - Quello che non capisco è come l'altra query lambda (persone) non mi imponga di creare un tipo anonimo per la proiezione? – Dal
Poiché si chiama '.First()' su di esso, che materializza i risultati, esso assorbe l'intero record e quindi seleziona le proprietà in memoria sul client. –
Spiegheresti perché richiede l'uso di un tipo anonimo? Grazie –