2012-03-23 6 views
3

ich mag die Rückkehr dieses Codes begrenzen:Grenze Rückkehr von list.where

Listx.AddRange(suggestions.Where(x => x.Contains(content))); 

so, dass nur weniger als 7 Elemente hinzugefügt werden. versuchte es so, aber es fühlt sich nicht richtig an, und es ist ziemlich langsam, weil listx bis zu 100 Einträge enthält.

Listx.AddRange(suggestions.Where(x => x.Contains(content)&&Listx.Count <= 6)); 

hat jemand ein paar Hinweise bekommen, um die Leistung des zweiten Stücks Code zu verbessern? Es wird immer dann verwendet, wenn das Textänderungs-Ereignis einer Textbox ausgelöst wird. Daher sollte es die Eingabe nicht verzögern.

Antwort

8

Sie können die Enumerable verwenden. Take Methode, um die Ergebnisse von jeder Linq-Abfrage zu begrenzen.

Listx.AddRange(suggestions.Where(x => x.Contains(content)).Take(6)); 

Wenn ich Sie mit dem 101 Samples for Linq vertraut gemacht würden, dort finden Sie Beispiele für jede Operation auf dem Linq Rahmen finden.

+1

gut ... peinlich, aber danke ^^ – roqstr

+0

Erstellt das nicht eine Liste von bis zu N, und nehmen Sie dann bis zu 6 von N? Es scheint so, als würde man nur eine neue Erweiterungsmethode erstellen, die beides wäre. –

+0

@willmel Nein, "Take" iteriert durch die ersten 6 Elemente des 'Where' Ausdrucks und stoppt dann. Es wird keine temporäre Liste erstellt, da dies nur eine IEnumerable-Kette ist. –