2013-08-21 8 views
5

Visual Web Developer 2010 Expressの.Net 4ターゲットプロジェクトでNuGetのNHibernate(3.3.1.4000)の最新バージョンを使用しています。NHibernate QueryOverエイリアスの問題

エイリアスを定義した例に従うと、lambdaを使ってエイリアスを設定するときに例外が発生します(スクリーンショットを参照)。

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

あなたは、私がエラーCannot convert lambda expression to type 'string' because it is not a delegate typeを取得しています見ることができるように。

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

任意の考え、問題を引き起こしている可能性がありますどのように:

は、私は私のコードの先頭でLINQの名前空間への参照を持っていますか?

答えて

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>(...)は、4つのオーバーロードがあります。

  • .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/ja/index.html#queryqueryover-aliases) – Sam

関連する問題