エイリアスを使用するメソッドの範囲外では、エイリアスには何も使用しないことをお勧めします。
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では、エイリアスは空の変数を使用して割り当てられます。変数はどこでも宣言できます(ただし、実行時にはnullにする必要があります)。コンパイラは、変数が正しく使用されているかどうかに対して構文をチェックできますが、実行時に変数は評価されません(エイリアスのプレースホルダーとして使用されるだけです)。
QueryOverの各LambdaExpression関数には、エイリアスの使用を可能にする対応するオーバーロードと、サブQueryOverを作成せずにエイリアスを使用して関連付けをトラバースする.JoinAlias関数があります。
したがって、メソッドのスコープ内で変数を使用することに固執します。