Я бы не хотел видеть вашу первую версию в моем коде. Если вам нужно иметь то, что по сути является полной функцией лямбды, я бы предпочел, чтобы лямбда просто вызывала полную функцию! Другими словами ...
theQuery.Select(s => GetX(s)); // just define a GetX function
И это также был бы простой перевод к синтаксису выражения запроса
from s in sources
select GetX(s);
Вы не сможете поместить свой полный блок кода в синтаксис выражения запроса. Вы можете перевести данную логику в нечто полезное (но грязное), однако я вполне уверен, что ваш фрагмент - это просто общий пример. На самом деле это не так, вы можете попробовать
select s.val == high ? 1 : (s.val == med ? 2 : 3); // totally messy