Когда вы присоединяетесь, используя анонимные классы, члены имен этих классов должны совпадать. Эта проблема легко решается добавлением имен членам анонимного класса:
int id = 2;
(from t1 in Table1
join t2 in Table2
on new { Id = t1.id, OtherId = id }
equals new { Id = t2.id, OtherId = t2.otherid }
select t1).ToList();
Хотя, чем больше я на это смотрю, тем больше понимаю, что соединение не должно быть таким сложным. Похоже, вы добавляете статический идентификатор в объединение. Вы должны иметь возможность обойтись без него в предложении where, которое уменьшит объединение до одного значения:
int id = 2;
(from t1 in Table1
from t2 in Table2
on t1.id equals t2.id
where t2.otherid = id
select t1).ToList();