2013-08-21 85 views
5

我在Visual Web Developer 2010 Express的.Net 4目標項目中使用NuGet的最新版NHibernate(3.3.1.4000)。NHibernate QueryOver別名問題

當我試圖遵循我已經看到的定義別名的示例時,使用lambdas設置它們時會發生異常(請參見屏幕截圖)。

Shows error 'Cannot convert lambda expression to type 'string'...

正如你看到的,我發現了錯誤Cannot convert lambda expression to type 'string' because it is not a delegate type

我要在我的代碼頂部的LINQ命名空間的引用:上什麼可能導致問題

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

有什麼想法?

回答

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)過載,因此「無法轉換......鍵入‘串’」的錯誤消息。

+0

謝謝,這似乎是正確的答案。我以爲還有其他事情在發生。沒有意識到我需要創建變量來將它們用作別名。但在閱讀你的答案後,我回到了文檔中,並且肯定它就在16.5。別名(http://nhforge.org/doc/nh/en/index.html#queryqueryover-aliases)。 – Sam