Esiste comunque la possibilità di refactoring di questo codice? L'unica differenza è l'ordine per parte.La query LINQ deve essere crescente o decrescente nella stessa query
Idealmente mi piacerebbe usare un'espressione delegato/lambda in modo che il codice è riutilizzabile, ma non so come aggiungere condizionalmente e rimuovere l'OrderBy operatori di query e OrderByDescending
var linq = new NorthwindDataContext();
var query1 = linq.Customers
.Where(c => c.ContactName.StartsWith("a"))
.SelectMany(cus=>cus.Orders)
.OrderBy(ord => ord.OrderDate)
.Select(ord => ord.CustomerID);
var query2 = linq.Customers
.Where(c => c.ContactName.StartsWith("a"))
.SelectMany(cus => cus.Orders)
.OrderByDescending(ord => ord.OrderDate)
.Select(ord => ord.CustomerID);
Cool. Grazie Jon. –
Un po 'fuori tema, ma quanto sopra verrà tradotto correttamente in Linq2SQL? IOW è abbastanza intelligente da vedere un metodo 'non supportato' ed eseguirlo prima che costruisca un albero di sintassi e generi l'SQL? Mi stavo solo chiedendo, mai provato. :) – leppie
@leppie: chiama semplicemente i metodi Queryable esistenti, ovvero quelli che creano l'albero delle espressioni. Nota che * non * funzionerà contro 'IEnumerable' al momento, sebbene tu possa facilmente scrivere metodi di estensione equivalenti che farebbero. –