Вы можете использовать Содержит, он не будет генерировать подзапрос IN но СУЩЕСТВУЕТ подзапрос, но это будет очень близко к исходному SQL
var q1 = context.B
.Select(item=>item.Id);
var q2 = context.A
.Where(a=>q1.Contains(a.UserId))
.Where(a=>a.Company == null); // Calling where twice for readability, will generate the same SQL as if you had both weres on a single line with AND, no performance overhead for doing so
Или, если вы «d, а записать его в одном фрагменте (будет генерировать один и тот же SQL)
var q2 = context.A
.Where(a=>context.B
.Select(item=>item.Id).Contains(a.UserId))
.Where(a=>a.Company == null);
Пожалуйста, никогда не удаляйте SQL и не запрашивайте конверсию. По крайней мере, покажите модель класса, поэтому видны свойства навигации и множество ассоциаций. Кроме того, скажите, какой тип LINQ вы нацеливаете (на сущности?), * И * показываете свои собственные первые усилия. Они разъясняют нам больше, чем вы думаете. –