【问题标题】:How to do Inner join on multiple columns in Nhibernate Query Over如何在 Nhibernate Query Over 中对多个列进行内部联接
【发布时间】:2015-11-04 11:52:38
【问题描述】:

我想查询我的一个实体,但我想查询多个列。

问题(表格)

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

现在 GroupTable 是

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

现在我想使用来自组表的 OpenId 和 CloseId 对 Question 表进行 queryOver。我能怎么做。

我可以轻松实现从SQL查询之类的。

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

我怎样才能通过 Queryover 得到这个?

类结构如下所示:

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; }
    }

【问题讨论】:

  • 我已经用类实体更新了问题
  • 如果使用 NHibernate,JOIN 的 ON 部分将*永远填充OR ...。它将为 Open 或 Close 属性加入。或者两者都 - 但随后将创建两个连接......所以上面的选择将不起作用
  • 那么最好的方法是什么?通过sql查询?

标签: nhibernate queryover


【解决方案1】:

你能不能试试。

            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();

【讨论】:

  • 在“session.QueryOver(() => ques)”上有语法错误
  • 你能把问题类和映射文件分享给我吗
  • 我认为这行不通。它正在对两列进行内部连接,因此这将是 q.OpenId = g.Id AND q.CloseId = g.Id 的正确答案。他的问题是关于 OR。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2019-06-28
相关资源
最近更新 更多