2016-03-21 12 views
1

Ich habe eine Tabelle für cars und einen treeview so Benutzer eine Anzahl von Autos und sehen Sie die detaillierten InfosLINQ Filtern einer Tabelle mit einem großen Array

Das Problem wählen kann, ist, wenn der Benutzer StackOverflow viele Autos diese Zeile Ursache wählen (nicht Punt beabsichtigt).

Es gibt 1300 Autos. In diesem Fall hat id[] 720 ganze Zahlen. Mit 163 id funktioniert ok.

IEnumerable<car> cresult = db.cars.Where(c => id.Any(s => s == c.car_id)).ToList(); 
               ^^^ 
               int [] 

Was ist der beste Weg, um meine Tabelle mit einem großen Array zu filtern?

Fehler:

enter image description here

+0

Welche Art von LINQ ist das? z.B. zu SQL, zu Entitäten (EF-Version?) etc. –

+0

@IvanStoev Ist EF 6.0, mit Npgsql –

+0

Nicht mit SqlServer-Provider passieren, sollte etwas speziell für Npgsql-Provider sein. Viel Glück. –

Antwort

2

sollten Sie Contains verwenden, anstatt Any() und Ihre eigenen vergleichen zu tun.

IList<car> cresult = db.cars.Where(c => id.Contains(s => c.car_id)).ToList(); 

Außerdem ist es wahrscheinlich keine gute Idee zu IEnumerable<car> werfen, wenn Sie ausdrücklich die Arbeit schalten Sie ihn in eine Liste gemacht haben.

Für weitere Leistungssteigerungen könnten Sie die Verwendung von HashSet<int> anstelle von int[] in Erwägung ziehen - obwohl es zugegebenermaßen, wenn dies in eine SQL-Abfrage umgewandelt wird, wahrscheinlich nicht viel (wenn überhaupt) Gewinn haben wird.

+0

was du meinst 'tust du selbst vergleich 'Muss ich eine Vergleichsfunktion schreiben? und bitte kann ausarbeiten, was nicht gute Idee ist, die Besetzung zu tun? Ich gebe nur die Liste zurück, um in der Ansicht zu zeigen. Und ich denke 'IEnumerable' ist einfacher als eine' Liste' ist nicht? –

+0

@JuanCarlosOropeza Tut mir leid, vielleicht war das "eigene Vergleich" überflüssig. Ich habe mich auf das 's => s == c.car_id' bezogen. In Bezug auf das Umwandeln in 'IEnumerable ' wird in der Regel empfohlen, bei Rückgabewerten so genau wie möglich * zu sein. In diesem Fall bedeutet das Umwandeln in "IEnumerable ", dass Sie Informationen wie "Anzahl" usw. verlieren. Sie haben die Arbeit bereits in eine "Liste" umgewandelt, so dass Sie die zusätzlichen Funktionen ebenfalls verfügbar machen können. Wenn Sie es einfach an ein Ansichtssteuerelement übergeben, spielt dies möglicherweise keine Rolle, aber im Allgemeinen ist es eine gute Idee. – Rob

+0

Arbeite gut, sollte nicht viel größer sein, aber kann ich mir Sorgen machen, wenn 'int []' größer ist? –

Verwandte Themen