我正在使用NHibernate(版本:3.3.1.4000),我正在尝试执行HQL查询,子查询作为SELECT值。它工作正常,问题是当子查询中没有数据时,我遇到以下错误:
代码示例:
IQuery query = session.CreateQuery(@"SELECT tb1,
(SELECT tb2
FROM Table2 tb2
WHERE tb2.IdVal = tb1.IdVal
AND tb2.Id2 = :id2)
FROM Table1 tb1
WHERE tb1.Cod = :cod1");
IList<object[]> dataResult = query.SetParameter("id2", "value")
.SetParameter("cod1", 1).List<object[]>(); // The error is trown in this Line
我想知道如何避免此错误,我只希望子查询在没有数据时返回“null”值。
我会感激任何帮助。 提前谢谢。
答案 0 :(得分:0)
看起来你要做的就是执行左连接。试试这个而不是使用子查询:
IQuery query = session.CreateQuery(@"
SELECT tb1, tb2
FROM Table1 tb1
LEFT JOIN Table2 tb2 ON tb1.IdVal = tb2.IdVal
WHERE tb1.Cod = :cod1 AND tb2.Id2 = :id2;
");
IList<object[]> dataResult = query
.SetParameter("id2", "value")
.SetParameter("cod1", 1)
.List<object[]>();
答案 1 :(得分:0)
你可以试试这个:
IQuery query = session.CreateQuery(@"SELECT tb1,
(SELECT MAX(tb2)
FROM Table2 tb2
WHERE tb2.IdVal = tb1.IdVal
AND tb2.Id2 = :id2)
FROM Table1 tb1
WHERE tb1.Cod = :cod1");
使用MAX应该使它在有一个时返回值,而在没有一个时返回NULL。
答案 2 :(得分:0)
你可以试试这个:
IList<object[]> dataResult = query.SetParameter("id2", "value")
.SetParameter("cod1", 1)
.List<object[]>()
.NotFound
.Ignore();