Как и любая реализация LINQ, QueryOver использует Деревья выражений манипуляции во время выполнения. В частности, смотрите класс ExpressionProcessor, в нем есть словарь, который отображает выражения в функции, которые применяют ICriteria.
QueryOver также использует свободные методы интерфейса. Например, при вызове OrderBy он возвращает IQueryOverOrderBuilder, который четко определяет, какие операции доступны при оформлении заказа. Аналогично, есть тип IQueryOverRestrictionBuilder, который определяет доступные методы для ограничений. Это в отличие от многих простых реализаций интерфейса, которые всегда возвращают this
, чтобы разрешить конкатенацию методов.