2016-08-03 19 views
1

Arbeit habe ich Dokumente Tisch und Zeichen Tisch. Dokument Datensatz kann mit vielen Aufzeichnungen in Zeichen verbunden werden Tabelle..Where in LinQ nicht richtig

Jetzt möchte ich alle Aufzeichnungen über Dokumente erhalten Tabelle, wenn Dokument-ID erscheint in Zeichen Tabelle.

Hier erhalte ich alle Dokumente:

var documents = (from c in context.documents select c); 

Hier bekomme ich alle meine Zeichen und speichern in Liste:

var myDocuments = (from s in context.signs where s.UserId== id select s.ID).ToList(); 

Diese Liste enthält Sammlung auf Dokument-ID.

Und hier, ich versuche, alle Dokumente zu erhalten, die in myDocuments Liste existiert:

documents.Where(item => myDocuments.Contains(item.ID)); 

Aber, wenn ich .ToList tun() durchweg alle Datensätze zurück (in der Datenbank existiert nur eine kompatibel Aufzeichnung)

Was ist falsch in LinQ-Anweisung?

+0

Ich kann 's.UserId == ID' nicht vergleichen vergleichen. Beziehen Sie Gehäuse mit? – Petaflop

+0

Speichern Sie das Ergebnis dieser Abfrage: 'documents.Where (item => myDocuments.Contains (item.ID));' irgendwo? – Fabjan

+0

Fabjan, ich speichere das Ergebnis der Abfrage nicht, weil ich später viele Filter anwende und schließlich mache ich .ToList() –

Antwort

0

Das Problem ist, dass diese Aussage nicht den Inhalt der Dokumente nicht verändert, gibt es nur die Ergebnisse (die Sie nicht mit etwas zu tun):

documents.Where(item => myDocuments.Contains(item.ID)); 

Dokumente sind immer noch die vollständige Liste.

Ändern Sie diese Zeile so etwas wie:

var matchingIDDocs = documents.Where(item => myDocuments.Contains(item.ID)); 

Und dann matchingIDDocs anstelle von "Dokumente" verwenden später in Ihrem Code.

+0

Oh mein Gott. .. Ich habe Dokumente vergessen = Dokumente (...) Danke! –

+0

Lol. Es passiert uns allen, mach dir keine Sorgen. :) – Overhed