我會首先暴露我想要做什麼,並解釋我的問題後。 我有2個表:「CharItem」和「屬性」,和一個表「ItemAttribute」來鏈接兩者,因爲它是一個m:n關係。該表格還可以爲該屬性定義一個值。NHibernate小組/ /有問題
我想搜索所有至少有一些屬性的項目。 SQL查詢是這樣的:
SELECT ci.*
FROM CharItem ci
INNER JOIN ItemAttribute ia
on ci.CharItemId = ia.CharItemId
WHERE
(
(ia.AttributeId = 48 and ia.ValueX >= 1)
or (ia.AttributeId = 6)
)
GROUP BY ci.CharItemId
HAVING count(ia.AttributeId) >= 2
因此,大家可以看到,我想要的是找到所有的項目,所以我的查詢必須返回 我一些項目對象。
我試過去做,我想我幾乎找到解決方案,但 我失去了一些東西。用下面的方法,我回到了良好的 ID,但不是一個完整的項目,我沒有找到如何得到一個完整的項目:X
var query = Session
.CreateCriteria(typeof(CharItem), "ci")
.CreateCriteria("ci.ItemAttribute", "ia", JoinType.InnerJoin);
Disjunction disjunction = Restrictions.Disjunction();
foreach (var entry in itemAttribs)
{
var attribute = entry.Key;
var sign = entry.Value.Item1;
var value = entry.Value.Item2;
var restrictAttrib = Restrictions.Eq("ia.Attribute", attribute);
Conjunction conjunction =Restrictions.Conjunction();
conjunction.Add(restrictAttrib);
conjunction.Add(Restrictions.Eq("ia.Value", values[j]));
disjunction.Add(conjunction);
}
query.Add(disjunction);
query.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("ci.CharItemId"),"CharItemid"));
query.Add(Restrictions.Ge(Projections.Count("ia.Attribute"), itemAttribs.Count));
}
var charItems = query.List<CharItem>();
感謝您的幫助。
解決!檢查答案,看看如何。
歡迎來到SO。只要一上來就看看我所做的編輯,看看如何在你的代碼塊中獲得語法高亮。 – Aren