2017-12-16 46 views
0

以下のクラスがあります。IListプロパティのサブプロパティを持つNHibernate QueryOverエンティティ

public class Customer{ 
    .... 
    .... 
    IList<Receipt> Receipts { get; set; } 
} 

public class Receipt{ 
    .... 
    IList<SoldProduct> Products { get; set; } 
} 

私の問題は、特定の製品を購入した顧客に質問しようとしていることです。次のコードを実行しようとすると、NullReferenceExceptionが発生します。

Customer c = null; 
Receipt r = null; 
SoldProduct sP = null; 

var queryOver = Session.QueryOver(() => c) 
    .JoinAlias(() => c.Receipts,() => r) 
    .JoinAlias(() => r.SoldProducts,() => sP) 
    .Where(() => c.Name.IsLike(query.Search, MatchMode.Anywhere) || 
          c.Surname.IsLike(query.Search, MatchMode.Anywhere) || 
          c.Address.IsLike(query.Search, MatchMode.Anywhere) || 
          c.Receipts.Select(receipt => 
          receipt.SoldProducts.Select(product => product.Product.OldId.ToString())) 
          .SingleOrDefault().Single().IsLike(query.Search, MatchMode.Anywhere)) 

私はちょうど今止まっています。もし私が知っていれば私はここのような重要なポイントを見逃しているかもしれません。実際にこのクエリを実行する簡単な方法があれば、私は本当に助けに感謝します。製品の別名にフィルタを適用する

+0

で問題が解決しない、あなたの答えをありがとうございました。 –

答えて

0

試してみてください。

Customer c = null; 
Receipt r = null; 
SoldProduct sP = null; 
Product p = null; 

var queryOver = Session.QueryOver(() => c) 
    .JoinAlias(() => c.Receipts,() => r) 
    .JoinAlias(() => r.SoldProducts,() => sP) 
    .JoinAlias(() => sp.Product,() => p) 
    .Where(() => c.Name.IsLike(query.Search, MatchMode.Anywhere) || 
          c.Surname.IsLike(query.Search, MatchMode.Anywhere) || 
          c.Address.IsLike(query.Search, MatchMode.Anywhere) || 
          p.OldId.ToString().IsLike(query.Search, MatchMode.Anywhere)) 
+0

ありがとうございました。質問が正しく機能しないという問題がありました。クエリ内でIDを持つ製品にクエリを実行すると、そのクエリは返されません。問題はp.OldId.ToString()であると思われますが、OldIdはintカラムであり、ここで文字列オブジェクトに変換するマッピングは機能していないようです。あなたはこれについて何も提案していませんか? –

関連する問題