2012-04-05 13 views
1

Ich verwende Microsoft Datenbank PUB in diese zwei Verleger relationalen Tabelle und pub_info Verleger haben Primärschlüssel auf pub_id Feld und pub_info Fremdschlüssel des Verlegers Tabelle habenGenerieren von Linq-Abfrage

pub_id

Ich versuche, jene Datensatz zu erhalten, die in Publisher Tabelle ist verfügbar, aber nicht in pub_info Tabelle mit Linq-Abfrage ich die Abfrage in sQL weiß

select pub_id from publisher where pub_id not in(select pub_id from pub_info); 

var data =db.publisher.where(x=>db.pub_info.select(x1=>x1.pub_id).Contains(x)).Select(x.pub_id) 

Fehler beim Abrufen während dieser Abfrage ausgeführt

, aber ich bin nicht in der Lage ge t Idee über die gleiche Abfrage in Linq zu erzeugen

+0

** Welche Fehler bekommt man ** – SLaks

+0

eine Frage stellen [wieder] (http : //stackoverflow.com/questions/10016597/generating-linq-query) ist sehr schlecht! –

Antwort

1

Ich glaube, du etwas wie das

var excludedIds = db.pub_info.Select(pi => pi.pub_id).ToArray(); 

var data = db.publisher.Where(p => !excludedIds.Contains(p.pub_id); 

tun könnte ich falsch sein könnte, aber ich denke, ich erinnere mich, dass es nicht in einer Runde gemacht werden.

EDIT: nicht in einer Runde gemacht bedeutet, dass ich denke, dass Sie die excludedIds "aufzählen" müssen. Aber Sie können das natürlich in einer Abfrage schreiben.

1

Sie könnten in der Lage sein, dies zu tun:

var data=(from p in db.publisher 
      where !(from pi in db.pub_info 
        select pi.pub_id 
       ).Contains(p.pub_id) 
      select p.pub_id 
     ); 

Oder könnte dies auch funktionieren:

var data=(from p in db.publisher 
      where !db.pub_info.Select(pi => pi.pub_id).Contains(p.pub_id) 
      select p.pub_id 
     );