5

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

当我尝试按照我见过的定义别名的示例进行操作时,在使用 lambdas 设置它们时出现异常(请参见屏幕截图)。

显示错误“无法将 lambda 表达式转换为类型“字符串”...

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

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

using System.Linq;
using System.Linq.Expressions;

关于可能导致问题的任何想法?

4

1 回答 1

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)
    // ...

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)重载,因此“无法转换......以键入'字符串'”错误消息。

于 2013-08-21T20:10:48.703 回答