Я бы попросил третий вариант:
var validContentIds = from a in context.CmsContentsAssignedToes
select a.ContentId;
var queryContents = from cnt in context.CmsContents
where !validContentIds.Contains(cnt.ContentId)
select cnt;
Или альтернативно (и эквивалентно):
var validIds = context.CmsContentsAssignedToes.Select(a => a.ContentId);
var queryContents = context.CmsContents
.Where(cnt => !validIds.Contains(cnt.ContentId));
Я бы не ожидал, что это повлияет на производительность - я 'Я ожидаю, что все они в конечном итоге будут использовать один и тот же SQL.