ICriteria を DetachedCriteria に変換する方法は誰でも知っています。以下を使用して、既存の ICriteria をサブクエリの一部として使用する必要があります。
.Add(Subqueries.PropertyIn("Name", myDetachedCriteriaSubquery))
ICriteria を DetachedCriteria に変換する方法はありますか。信頼できる言及があれば「いいえ」を受け入れます。
ICriteria を DetachedCriteria に変換する方法は誰でも知っています。以下を使用して、既存の ICriteria をサブクエリの一部として使用する必要があります。
.Add(Subqueries.PropertyIn("Name", myDetachedCriteriaSubquery))
ICriteria を DetachedCriteria に変換する方法はありますか。信頼できる言及があれば「いいえ」を受け入れます。
mattk の回答に続いて、 DetachedCriteria を継承してそのコンストラクターにアクセスできます。
public class ConvertedDetachedCriteria : DetachedCriteria
{
public ConvertedDetachedCriteria(ICriteria criteria)
: base((CriteriaImpl) criteria, criteria)
{
var impl = (CriteriaImpl) criteria;
impl.Session = null;
}
}
これで、次のようなコードを記述できます。
var criteria = Session.CreateCriteria<Person>()
.Add(Restrictions.Eq("Name", "John"));
var clonedDetachedCriteria = new ConvertedDetachedCriteria(criteria);
var newCriteria = Session.CreateCriteria<Person>()
.SetProjection(Projections.SubQuery(clonedDetachedCriteria))
.List<string>();
免責事項: 私はこれを NH 2 で最小限のテストにのみかけました...それが機能するか、または有用であるという保証はありません。
var clonedDetachedCriteria = new ConvertedDetachedCriteria(CriteriaTransformer.Clone(criteria));
あなたの基準セッションnullの場合、「オブジェクトリファラン..」例外を作成します。
使用するCriteriaTransformer.Clone(criteria)
DetachedCriteriaには、ICriteriaを受け取るコンストラクターがありますが、これは内部です。CriteriaTransformerによって使用されます。おそらくあなたは似たようなものを実装することができますか?