что выделено - это я парсю экспрешены через рефлексию, но как видно со скрина в .Where который я парсю, вызывается функция Exists которая в себя принимает точно то же самое (ну по онтологии), что я парсю под зеленым маркером. Вопрос как его пропарсить, аля выполнить эту цепочку методов которые под красным маркером в методе Exists и просто при парсинге верхнего Where вставить результат выполнения этой цепочки? Возможно ли или придется делать парсер на парсер)
Точно также как ты парсишь другие виды выражений в экспрешнах - написать полотно с детектом разных видов нод и корректно их схлопнуть как тебе надо
Нужно смотреть в дебаге как компилятор это соберёт во вложенную структуру, но предварительно это будет цепочка MethodCallExpression с хранением instance, на котором производиться вызов Но тебе на этом инстансе даже ничего не нужно вызывать, так как главное знать как работает каждый метод 1) SelectSingle - отсюда дженериком достаем таблицу для вложенного запроса 2) Where - дописываем к вложенному запросу фильтр ... Ты единственное можешь валидировать что инстанс builder == тому же инстансу, на котором вызывался Select по юзерам Т.е. ты смотришь на этот MethodCallExpression, смотришь что он использует тот же билдер, значит считаем что начался внутренний запрос. Так как внутренних запросов может быть много по вложенности, можно даже сделать это через некого рода рекурсию
Обсуждают сегодня