NHibernate QueryOver别名问题

Sam*_*Sam 5 c# linq nhibernate lambda

我在Visual Web Developer 2010 Express的.Net 4目标项目中使用NuGet的最新版NHibernate(3.3.1.4000).

当我尝试按照我看到的用于定义别名的示例时,在使用lambdas设置它们时会出现异常(参见屏幕截图).

显示错误'无法将lambda表达式转换为键入'string'...

如你所见,我收到了错误Cannot convert lambda expression to type 'string' because it is not a delegate type.

我在代码顶部引用了LINQ命名空间:

using System.Linq;
using System.Linq.Expressions;
Run Code Online (Sandbox Code Playgroud)

有关可能导致问题的原因的任何想法?

Dan*_*ing 8

为了使用像role表达式中的变量,你必须首先定义它,就像这样......

Role roleAlias = null; // <-- these two lines are missing from your code.
Person personAlias = null; 

var x = session.QueryOver<Role>(() => roleAlias)
    .JoinAlias(r => r.People, () => personAlias)
    // ...
Run Code Online (Sandbox Code Playgroud)

ISession.QueryOver<T>(...) 有四个重载:

  • .QueryOver<T>()
  • .QueryOver<T>(Expression<Func<T>> alias)
  • .QueryOver<T>(string entityName)
  • .QueryOver<T>(string entityName, Expression<Func<T>> alias)

显然是因为它无法弄清楚是什么role,它假设您正在尝试使用.QueryOver<T>(string entityName)重载,因此"无法转换...键入'string'"错误消息.