In SQL I’d say:
select a.*
from TableA a
left join TableB b on a.Type = b.Type and a.SomeDate < b.AnotherDate
where b.ID is null
This would select all records in TableA where no record exists in TableB of the same Type and later date.
In Linq, how do you do this?
from a in TableA
join b in TableB on a.Type equals b.Type into j // what about the comparator?
from x in j.DefaultIfEmpty()
where x == null
select a;
Thanks!
EDIT:
A few good answers have been proposed, all of which address the specific need expressed in this question, but they’re all basically workarounds. They all translate to a nested “exists” queries in one way or another, whereas the SQL in the question is one neat query without any nesting. The case given here is just an example of a general principle; what I’d really like to see is a Linq expression that will translate to (roughly) the syntax of the above SQL query.
If you want the linq query to be exactly as your SQL you can write:
But I would say that the first solution is better as the
where b == nullwould result in a filter operation in the queryplan.