Sono in procinto di creare un servizio per semplificare la selezione di un protocollo da parte di un utente da IANA - Protocol Registry.Come limitare in modo efficiente e quindi concatenare un risultato con un'espressione linq/lambda?
Come si potrebbe immaginare la ricerca nel registro per il termine http
richiama un sacco di colpi. Dal momento che amt-soap-http
verrà selezionato da un utente molto meno frequentemente rispetto al diretto http
ho deciso che sarebbe una buona idea estrarre tutto ciò che inizia con http
e quindi concatenarlo con i risultati rimanenti.
L'espressione lambda sotto è il risultato di tale processo di pensiero:
var records = this._ianaRegistryService.GetAllLike(term).ToList();
var results = records.Where(r => r.Name.StartsWith(term))
.OrderBy(r => r.Name)
.Concat(records.Where(r => !r.Name.StartsWith(term))
.OrderBy(r => r.Name))
.Take(MaxResultSize);
Purtroppo, mi sento come sto scorrendo i miei risultati più volte del necessario. Considerazioni sull'ottimizzazione prematura a parte c'è una combinazione di espressioni lambda che sarebbe più efficiente di quanto sopra?
Per chi (come @Bobson e l'upvoter) che non conoscono la differenza tra '' Orderby' e GroupBy + SelectMany': Uno è 'n * log (n)' il funzionamento e l'altro 'n ' – I4V
@ I4V Usando questa conoscenza c'è una risposta più efficiente della [risposta D Stanley fornita] (http://stackoverflow.com/a/14884435/61654)? – ahsteele
ahsteele, ne avevo dato uno, ma l'ho rimosso dopo 3 downvotes (perché ho scritto * Non l'ho ancora testato *) – I4V