Ho cercato di utilizzare LINQ dinamico su Entity nella mia applicazione per specificare l'attributo OrderBy al runtime. Tuttavia quando si utilizza il codice come descritto nella maggior parte della documentazione:OrderBy ("it." + Sort) - Hard coding nel framework LINQ to Entity?
var query = context.Customer.OrderBy("Name");
ho ricevuto la seguente eccezione:
System.Data.EntitySqlException: 'Nome' non poteva essere risolto in ambito o contesto attuale . Assicurati che tutte le variabili di riferimento siano incluse nell'ambito, che gli schemi richiesti siano caricati e che gli spazi dei nomi siano referenziati correttamente.
Dopo molte ricerche ho trovato questo sito MSDN:
http://msdn.microsoft.com/en-us/library/bb358828.aspx
che includeva il seguente esempio di codice:
ObjectQuery<Product> productQuery2 = productQuery1.OrderBy("it.ProductID");
Questo mi ha spinto a cambiare il mio codice di seguito:
var query = context.Customer.OrderBy("it.Name");
Dopo questo il codice funziona perfettamente. Qualcuno potrebbe confermare che questo è davvero il modo corretto per far funzionare OrderBy con LINQ su Entity? Non posso credere che il quadro sarebbe stato implementato in questo modo, forse ho trascurato qualcosa?
Grazie, Matt
Grazie, proverò la libreria dinamica e vedrò se funziona. Sareste in grado di fornire un esempio quando sarebbe preferibile utilizzare la sintassi 'it'? Sembra accoppiare strettamente il tuo codice con un'implementazione su cui non hai alcun controllo. Cioè potrebbe cambiare e quindi rompere il tuo codice? Grazie, Matt – Matt
IMHO, l'unica buona ragione per utilizzare ESQL su System.Linq.Dynamic è se è necessario utilizzare una delle poche funzionalità in ESQL che non sono disponibili in S.L.D., come le regole di confronto. Per lo più preferisco il S.L.D. –