var result=from stdnt in students
join lssn in lessons on new {number ==stdnt.state==true ? stdnt.newnumber : s.oldnumber}
equals new {number ==stdnt.state==true ? lssn.newnumber : lssn.oldnumber}
select new {.... };
'lssn' name 'equals' 演算子は右辺を尊重しません。式の 'equals' 演算子は辺の変更を考慮します。