Search code examples
nhibernatequeryover

How to do Inner join on multiple columns in Nhibernate Query Over


I want to do a query over for one of my entity but I want to get done for multiple columns.

Questions (Table)

Id  Name    OpenId     CloseId
1   A         1          NULL
2   B         2           3
3   C         4           5
4   D         6           7
5   E         8           9

Now the GroupTable is

Id  Name
1   AA
2   BB
3   CC
4   DD
5   EE
6   FF
7   GG
8   HH
9   II

Now I want to do a queryOver on Question table with both OpenId and CloseId which are from the group table. How can I do.

I can achieve easily from the SQL query like.

select * from questions q 
inner join GroupTable g on q.OpenId = g.Id Or q.CloseId = g.Id

How can I get this through Queryover ?

The class structure looks like this :

public class Question
    {
        public int Id { get; set; }
        public GroupTable OpenTable { get; set; }
        public GroupTable CloseTable { get; set; }
    }

    public class GroupTable
    {
        public int Id { get; set; }
        public int Name { get; set; }
    }

Solution

  • can you try it.

                GroupTable openTable = null;
                GroupTable closeTable = null;
                Question ques = null;
                List<Question> quesList = new List<Question>();
    
                quesList = session.QueryOver<Question>(() => ques)
                    .JoinAlias(() => ques.CloseTable, () => closeTable)
                    .JoinAlias(() => ques.OpenTable, () => openTable)
                    .Where(() => ques.CloseTable == closeTable && ques.OpenTable == openTable)
                    .List().ToList();