I would suggest a third option:
var validContentIds = from a in context.CmsContentsAssignedToes select a.ContentId; var queryContents = from cnt in context.CmsContents where !validContentIds.Contains(cnt.ContentId) select cnt;
Or alternatively (and equivalently):
var validIds = context.CmsContentsAssignedToes.Select(a => a.ContentId); var queryContents = context.CmsContents .Where(cnt => !validIds.Contains(cnt.ContentId));
I would not expect performance to be affected - I expect that they will all end up with the same SQL.
source share