Проблема в том, что EF пытается преобразовать все ваше выражение в запрос T-SQL.Так это будет выглядеть примерно так:
select ac.CODE, cur.CODE from shop ac
inner join books cur on ac.CODE = cur.CODE
Вот ваша проблема.Поля CODE имеют разные типы, и сервер не может присоединиться к ним.В T-SQL вы можете использовать CAST, но, поскольку EF не поддерживает такую операцию, вы ничего не можете сделать.И в конце концов, почему вы храните эти коды в строке?Если у вас есть такой запрос, то в большинстве случаев есть проблемы с вашей схемой БД.Я бы посоветовал вам взглянуть на схему и провести ее рефакторинг, поэтому CODE всегда имеет тип long.Тогда все будет работать.
Если вы все еще действительно хотите использовать разные типы для ваших столбцов.Вы можете посмотреть на этот вопрос, чтобы увидеть, как выполнить CAST Преобразование строки в Int в EF 4.0