NHibernate QueryOver避免使用笛卡尔积

时间:2019-07-19 12:59:19

标签: c# queryover

我很难构造查询,要避免使用笛卡尔积,不要执行太多查询并获得想要的结果。 我有表Todo,每个Todo都有一个所有者,类型为User。 此外,如果键入Todo,则每个ResponsibleUsers都有一个IList<User>的列表。 我想获得一个列表,其中Todo是当前User的所有者或ResponsibleUsers之一。

这些对象的映射如下:

public class Todo
{
    public virtual long Id { get; set; }
    public virtual string Name { get; set; }
    public virtual User Owner { get; set; }
    public virtual IList<TodoUserX> ResponsibleUsers { get; set;}
}

public class TodoUserX
{
    public virtual Todo Todo { get; set; }
    public virtual User User { get; set; }
}

public class User
{
    public virtual long Id { get; set; }
    public virtual string Fullname { get; set; }
}

我可以使用group by避免使用笛卡尔积,但是我只想获得Todo,但也不想获得ResponsibleUsers

我尝试了以下方法:

public IList<Todo> GetTodos(long userId)
{
    QueueTodoResponsibleUsersFuture();
    var query = Session.QueryOver(() => _todoAlias)


    //How to add the conditions for Owner and responsible users? 

    return query.List();
}

private void QueueTodoResponsibleUsersFuture()
{
    Session.QueryOver(() => _todoUserAlias)
        .JoinAlias(() => _todoUserAlias.Todo, () => 
            _todoAlias, JoinType.LeftOuterJoin)
        .JoinAlias(() => _todoUserAlias.User, () => 
            _responsibleUserAlias, JoinType.LeftOuterJoin)
        .Future<Todo>();
}

0 个答案:

没有答案