長い時間のリスナー、初めての呼び出し元。queryover - 同一の離接で参照のプロパティとプロパティを持つQueryOver
私は、自分のエンティティの特定のプロパティにわたっていくつかの用語を検索するQueryOver APIを使用してクエリを作成しようとしています。問題は、それらのプロパティのいくつかが別のエンティティへの参照であることです。しかし、私はまだその参照のプロパティで指定された用語を検索する必要があります。
私は以下のようなコードを書くことができます。以下のコードでは、FirstName、MiddleName、およびLastNameはすべてPersonエンティティの基本的な文字列プロパティです。 DepartmentプロパティはDepartmentタイプの参照プロパティです。 Departmentエンティティには、Id、Value、Descriptionという3つのプロパティがあります。 Person.Department.Valueであり、基本プロパティと共に指定された用語を検索する必要があります。
var queryOver = session.QueryOver<Person>();
foreach (string term in searchTerms)
{
queryOver = queryOver.Where(Restrictions.On<Person>(x => x.FirstName).IsInsensitiveLike(term, MatchMode.Anywhere) ||
Restrictions.On<Person>(x => x.LastName).IsInsensitiveLike(term, MatchMode.Anywhere) ||
Restrictions.On<Person>(x => x.MiddleName).IsInsensitiveLike(term, MatchMode.Anywhere) ||
//This following line doesn't work.
Restrictions.On<Person>(x => x.Department.Value).IsInsensitiveLike(term, MatchMode.Anywhere)
}
エイリアスを使用し、NHibernate.Linq/Query APIを使用しようとしました。エイリアスを使用して何らかの参加をする必要があることは分かっていますが、私が読んだすべての質問/記事を理解していないと思います。それらのほとんどは、参照または子に対してクエリ/サブクエリを行うことについて話しているようですが、これらのクエリを他のプロパティの横にあるクエリに変換し、それらをすべてOR処理することに問題があります。
私が撮影してる最終SQLは次のようなものです:最後に
SELECT *
FROM `persons`
WHERE (`FirstName` LIKE '%term1%' OR
`LastName` LIKE '%term1%' OR
`MiddleName` LIKE '%term1%' OR
`Department`.`Value` LIKE '%term1%') AND //I know this won't work
(`FirstName` LIKE '%term2%' OR
`LastName` LIKE '%term2%' OR
`MiddleName` LIKE '%term2%' OR
`Department`.`Value` LIKE '%term2%') AND etc...
、任意の助けを事前にどうもありがとうございました。私はNHibernate内で別のAPIを使用したり、別の検索結果で同じ結果を得ることができると思われる場合は別の検索方法を使用しています。