2010-11-22 14 views
1

Ich habe LINQ Ergebnis, und ich habe Liste. Ich möchte Where() auf dem LINQ und REMOVE alle übereinstimmenden Zeichenfolgen aus der Liste entfernen.Wie aus LINQ-Ergebnissen zu entfernen, passende Elemente aus Array

Ich bekomme Fehler: Lokale Sequenz kann nicht in LINQ to SQL-Implementierungen von Abfrageoperatoren verwendet werden, mit Ausnahme der Betreiber

Was kann ich tun Enthält?

+2

bitte einen vollständigen Beitrag Codebeispiel. –

Antwort

3

Sie benötigen AsEnumerable() oder ToList() vor Ihrer Where Aufruf aufrufen LINQ to SQL zu zwingen, alle Ergebnisse an den Client herunterladen und eine lokale Where auszuführen.

(Da Ihr Where Anruf nicht auf dem Server ausgeführt werden können, müssen Sie es auf dem Client tun)

+0

Erzwingt AsEnumerable immer Materialisierung? –

+0

@Rob: Wie kann es nicht? – SLaks

+0

Weil es effektiv nur ein Cast ist: http://msdn.microsoft.com/en-us/library/bb335435.aspx "Die' AsEnumerable (IEnumerable ) 'Methode hat keinen anderen Effekt, als den Kompilierzeittyp zu ändern der Quelle von einem Typ, der IEnumerable zu IEnumerable selbst implementiert. " –

2

Sie eine Kopie machen müssen (mit ToList, die schneller als ToArray ist) Sie der Elemente‘ re Entfernung:

var removeMe = list.Where(...).ToList(); 

Jetzt removeMe sicher sein wil jedoch zu durchlaufen, ein besserer Ansatz wäre es, die List.RemoveAll Methode zu verwenden, denn dann brauchen Sie keine temporären Datenstrukturen

+0

'ToList()' wird schneller sein. – SLaks

+0

@SLaks [Citation needed] –

+0

Wenn Ihr Set nicht genau 2^N Elemente hat, muss 'ToArray' in ein kleineres Array kopiert werden, nachdem es fertig ist (da das Array genau die richtige Größe haben muss). Da Listen am Ende mehr Platz haben können, werden mit 'ToList' weniger Kopien erstellt. – SLaks

Verwandte Themen