Я бы порекомендовал никогда не использовать что-либо для псевдонима вне области метода, который использует псевдоним.
QueryOver - строго типизированная версия Criteria, в Criteria псевдонимом является строковое значение.
IList cats = sess.CreateCriteria(typeof(Cat))
.CreateAlias("Kittens", "kt")
.CreateAlias("Mate", "mt")
.Add( Expression.EqProperty("kt.Name", "mt.Name") )
.List();
Но теперь ему нужно присвоить псевдоним переменной, поэтому мы просто создадим его для него:
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => catAlias.Age > 5)
.And(() => kittenAlias.Name == "Tiddles");
Из документации NHForge сказано следующее:
http://nhibernate.info/doc/nh/en/index.html#queryqueryover-aliases
15,5.Псевдонимы
В традиционном интерфейсе ICriteria псевдонимы назначаются с использованием «магических строк», однако их значение не соответствует имени в домене объекта.Например, когда псевдоним назначается с помощью .CreateAlias («Kitten», «kittenAlias»), строка «kittenAlias» не соответствует свойству или классу в домене.
В QueryOver псевдонимы назначаются с помощью пустой переменной.Переменная может быть объявлена где угодно (но должна быть нулевой во время выполнения).Затем компилятор может проверить, правильно ли используется синтаксис для переменной, но во время выполнения переменная не оценивается (она просто используется в качестве заполнителя для псевдонима).
Каждая функция лямбда-выражений в QueryOver имеет соответствующую перегрузку, позволяющую использовать псевдонимы, и функцию .JoinAlias для обхода ассоциаций с использованием псевдонимов без создания вложенного QueryOver.
Так что придерживайтесьпросто использовать переменную в области видимости метода.