NHibernate 如何实现 Func<T> 参数的赋值。

How does NHibernate achieve assignment of a Func<T> parameter.

给定如下:

Post posts = null;
Author author = null;
blog = session.QueryOver<Blog>()
              .Where(x => x.Id == 1)
              .JoinAlias(x => x.Posts, () => posts)
              .JoinAlias(() => posts.Author, () => author)
              .SingleOrDefault();

在 NHibernate 中,上述值可以传递给 JoinAlias

的第二个参数的变量

我试图解决这个问题,我得到的最接近的结果是将 Body 转换为 MemberExpression,然后将表达式转换为 ConstantExpression,但这会创建 .Value,它是只读的,使用反射分配成员不会修改传入的引用。

NH 如何做到这一点?

没有。

这只是语法。 postsauthor 都没有赋值。这些变量在这里只是为了允许在以后的限制中将它们用作别名,例如以下取自 here:

的示例
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
    session.QueryOver<Cat>(() => catAlias)
        .JoinAlias(() => catAlias.Kittens, () => kittenAlias)
        .Where(() => kittenAlias.Name == "Tiddles");

它允许 QueryOver 将所有内容转换为有效的 SQL 查询。 (我猜实际上是 HQL,然后转换为 SQL。)但是在执行之后,您应该会发现您的变量未受影响,并且仍然 null.