2011-01-13 17 views
0

Ich versuche, eine Linq-Abfrage zu schreiben, die keine Million Kindabfragen auslöst.linq to sql - Abfrage, um Elemente ohne Kinder zu finden

, was ich tun möchte, ist so etwas in SQL

select incoming.id, incoming.message, outgoing.message 
from incoming 
left join outgoing on incoming.id = outgoing.originalMessageId 
where outgoing.message is not null 

so dass im Grunde ich die linke tue join nur tun kann ich die Objekte finden, die Kinder nicht haben.

gibt es eine Möglichkeit, dies zu tun, und geben Sie einen getippten Haufen der "eingehenden" Elemente ...?

klingt einfach, und ich habe ein paar verschiedenen Ansätze ausprobiert, aber ich glaube, ich aus Mangel an Schlaf bin Leiden so mein Gehirn ist es nicht machen passieren :(

Vielen Dank im Voraus Doug

+1

ich bin verwirrt Sind Sie sicher, dass Sie die Spaltennamen in der SQL korrekt bekam ich denke es wählen incoming.id lesen sollte?. .. nicht id.incoming – spender

+0

Ich hasse es, äußere Joins zu tun mit der EF! –

+0

yep hatte meine sql falsch - sorry, ich habe es behoben – Doug

Antwort

1

Wenn ich Ihre Frage richtig verstanden habe, sollte dies den Trick tun.

Incoming 
.Join(
    Outgoing 
     .Where(o => o.message != null), 
    i => i.id, 
    o => o.originalMessageId, 
    (i,o) => new {Incoming=i, Outgoing=o} 
)