2

NHibernate を使用した asp.net mvc アプリケーションを使用していますが、問題を解決して一部のデータをクエリする方法がわかりません。私はこのクエリを持っています:

// create query
var query = session.QueryOVer<Laudo>().Fetch(x => x.Equipament).Eager;

// add some filters
if (idEquipament.HasValue) 
  query = query.And(x => x.Equipament.Id == idEquipament.Value);

//I got the error here...
if (idCompany.HasValue)
  query = query.And(x => x.Equipament.Company.Id == idCompany.Value);

このクエリを実行しようとすると、例外が発生し、次のメッセージが表示されます: "プロパティを解決できませんでした: Equipament.Company.Id of: DomainModel.Laudo "

この問題を解決するにはどうすればよいですか? ありがとう

4

2 に答える 2

2

そのような別のエンティティ プロパティを使用することはできません。Hibernate は、現在のエンティティのプロパティに評価できる式を期待しています。別のエンティティを使用JoinQueryOverまたは参加する必要があり、その後実行します。JoinAliaswhere

JoinQueryOver:

// ...
query = query.JoinQueryOver(x => x.Equipment)
    .JoinQueryOver(x => x.Company)
    .Where(c => c.Id == idCompany.Value);

JoinAlias:

Equipment equipment = null;
Company company = null;

// ...
query = query.JoinAlias(x => x.Equipment, () => equipment)
    .JoinAlias(() => equipment.Company, () => company)
    .Where(() => company.Id == idCompany.Value);

詳細情報:
JoinQueryOver と JoinAlias の違いは何ですか?
NHibernate QueryOver エイリアスとして使用できるものは何ですか?
複雑な nHibernate QueryOver 式

于 2012-07-08T21:11:41.600 に答える
1

あなたの質問のために選択されたタグは、あなたが QueryOver ではなく LINQ を使いたくなかったと私に思わせます。

Queryこれは、NHibernate.Linq名前空間で拡張メソッドを使用して実現されます。

var query = session.Query<Laudo>().Fetch(x => x.Equipament);
if (idEquipament.HasValue) 
  query = query.Where(x => x.Equipament.Id == idEquipament.Value);
if (idCompany.HasValue)
  query = query.Where(x => x.Equipament.Company.Id == idCompany.Value);
于 2012-07-09T00:38:38.030 に答える