我有一个Document类,它有一个User Property,它是拥有该文档的User,但我也有一个User List。有权访问该文档的用户。我正在尝试创建一个查询,该查询将返回我拥有或可以访问的文档。
IList<Document> results = UnitOfWork.CurrentSession.CreateCriteria(typeof(Document))
.CreateCriteria("Owner")
.CreateCriteria("UserList")
.Add(nh.Criterion.Restrictions.IdEq(obj.Id))
.SetFirstResult(pageSize * page)
.SetMaxResults(pageSize)
.List<Document>();
以上是我到目前为止所尝试但无济于事的内容。 Document类的结构缩短为:
public class Document : DomainObject<Document>{
public Document(){
UserList = new List<User>();
}
public virtual User Owner{get;set;}
public virtual IList<User> UserList{get;set;}
}
我感谢任何关于此的指导!!
Cheeers,
安德鲁
示例SQL我正在寻找
declare @UserID uniqueidentifier
set @UserID = '37f7a55f-84c9-461b-a5b2-b412fe96932b'
select * from [Document] s
where s.UserID = @UserID
or exists(select * from DocumentUser su where su.userid = @UserID)
答案 0 :(得分:1)
请您发布可以返回您想要的SQL吗? 。
我认为那里有一个子查询 - 在这种情况下,一个独立的标准可能会有所帮助。然后将其添加到ICriteria,如:Add(Subqueries ....)
答案 1 :(得分:1)
我做到了!
感谢您的帮助!你最后发表评论并向我询问sql让我再次看清楚:这是解决方案:
var detached = DetachedCriteria.For<Document>()
.CreateCriteria("UserList")
.SetProjection(Projections.Id())
.Add(Restrictions.IdEq(obj.Id));
IList<Document> results = UnitOfWork.CurrentSession.CreateCriteria(typeof(Document),"s")
.CreateAlias("s.User","u")
.Add(Restrictions.Or(Restrictions.Eq("u.Id", obj.Id), Subqueries.Exists(detached)))
.SetFirstResult(pageSize * page)
.SetMaxResults(pageSize)
.List<Document>();