は、の2つのエンティティがあります推測してみましょう:のNHibernateのように制限簡略化のため
public class Entity
{
public string Value { get; set; }
public ChildEntity Child { get; set; }
}
public class ChildEntity
{
public string Value { get; set; }
}
私はValue
かChild.Value
いずれかが指定された文字列query
のような鈍感であるすべてのエンティティを見つける必要があります。私は今では持っているものだ
は:
Entity entity = null;
ChildEntity child = null;
var nhibernateQuery = session
.QueryOver(() => entity)
.JoinAlias(() => entity.Child,() => child);
if (!string.IsNullOrWhiteSpace(query))
{
nhibernateQuery = nhibernateQuery
.Where(
Restrictions.Or(
Restrictions.On(() => entity).IsInsensitiveLike(query),
Restrictions.On(() => child).IsInsensitiveLike(query)
)
);
}
return nhibernateQuery.List().ToArray();
私はNullReferenceException
取得 - 正しく、エイリアスを処理しないRestrictions.On
のように思えます。私が試してみました
別のアプローチは、this postによって提案され.JoinQueryOver()
です:
return session
.QueryOver<Entity>()
.Where(Restrictions.InsensitiveLike("Value", query))
.JoinQueryOver(e => e.Child)
.Where(Restrictions.InsensitiveLike("Value", query));
このことは、一つのことを除いて動作します:それは両方Value
とChild.Value
がquery
のようなもので、すべてのアイテムを返します。私は同じことが必要ですが、or
ロジックです。
これを機能させるには何が必要ですか?エイリアスの有無にかかわらず、.CreateCriteria()
を使用しないで.QueryOver()
を使用したいと思いますが、実用的な解決策を教えていただければ幸いです。
MatchModeオプションを追加しましたか? –
@WillyDavidJrあなたは何を意味するのか説明していただけますか? 'MatchMode'は文字列の比較方法に影響しますか?この最小限の例よりも関連するコードはありません。 –