任何人都知道如何將ICriteria轉換爲DetachedCriteria。我需要使用現有的ICriteria作爲使用子查詢的一部分:NHibernate:將ICriteria轉換爲DetachedCriteria
.Add(Subqueries.PropertyIn("Name", myDetachedCriteriaSubquery))
有什麼辦法到的ICriteria轉換成的DetachedCriteria。我會以可靠的參考來接受「不」。
任何人都知道如何將ICriteria轉換爲DetachedCriteria。我需要使用現有的ICriteria作爲使用子查詢的一部分:NHibernate:將ICriteria轉換爲DetachedCriteria
.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中最小的測試......不保證它能起作用或有任何用處。
DetachedCriteria有一個構造函數,它需要一個ICriteria,但它是內部的。它由CriteriaTransformer使用。也許你可以實現類似的東西?
var clonedDetachedCriteria = new ConvertedDetachedCriteria(CriteriaTransformer.Clone(criteria));
如果您的標準會話爲空,則創建「對象referans ..」異常。
使用CriteriaTransformer.Clone(criteria)