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中将更容易。 –