0
什麼是在NHibernate的語法(3.3版本)查詢(標準?)以下SQL語句:sql語句NHibernate的標準
SELECT DISTINCT usr.* FROM User usr, User_SecurityGroup grp, SecurityGroup_Permission prm, Permission org
WHERE usr.Id = grp.User_id AND grp.SecurityGroup_id = prm.SecurityGroup_id AND org.Id = prm.Permission_id
AND org.Site_id IN (1,2,3) AND org.PermRead = 1 AND usr.Active = 1 AND org.Active = 1;
我不確定如何加入會之間完成表格和標準語法來完成這樣的任務。
對於這個特定的查詢,網站ID列表將在
另外的條件下通過「org.PermRead = 1」,屬性名稱將是動態的。所以它可能是「PermWrite」。
編輯: 好了,所以這是我迄今爲止
ICriteria criteria = this.Session.CreateCriteria<User>();
criteria.Add(Restrictions.In("User.Site", siteList.ToArray()));
criteria.Add(Restrictions.Eq("User.Active", true));
criteria.Add(Restrictions.Eq("Site.Active", true));
criteria.Add(Restrictions.Eq(Enum.GetName(typeof(Perm.Types), access), true));
criteria.SetResultTransformer(Transformers.DistinctRootEntity);
return criteria.List<User>();
我覺得一個連接就可以在這樣的格式:
criteria.CreateAlias("Sites", "Sites", NHibernate.SqlCommand.JoinType.LeftOuterJoin);
有幾種方法可以加入所有的NHibe rnate查詢方法。你嘗試過什麼嗎? –
更新了原來的問題。 – user1838662
是的,ICriteria上的CreateAlias()和CreateCriteria()會沿着映射的關聯創建連接,但是你顯示的條件代碼中的命名與SQL並不完全匹配,所以判斷是否有錯誤有點難。如果您試圖在沒有映射關聯的實體之間進行連接,那麼在HQL或LINQ中將更容易。 –