Проблема связана с вашим подзапросом:
from q in _db.Contacts_Companies
where q.ContactId == contactId && q.Deleted == false
select q.CompanyId
Это не возвращает int
- оно возвращает (как показано в вашем сообщении об ошибке) IQueryable<int>
.
Возможно, вы освоились с семантикой отложенного выполнения linq?
В любом случае, для решения этой проблемы вам необходимо преобразовать IQueryable<int>
в простой int
. Поскольку вы всегда ожидаете ровно одного результата, я бы предложил добавить .First()
:
return from p in _db.Companies
where p.Deleted == false &&
(from q in _db.Contacts_Companies
where q.ContactId == contactId && q.Deleted == false
select q.CompanyId).First().Equals(p.Id)
select p;