我正在构建一个需要返回用户ID为空的订单的hql查询:
IList<Order> rows = DataContext.LoadList<Order>(
"from Order " +
"where OrderDate < ? " +
" and User.ID is null" //have also tried 'and User is null'
, DateTime.Today.AddMonths(-1));
即使针对db的直接查询返回几十个,也不返回任何记录。
如果我使用相同的查询,但将'is null'替换为'33'(有效的userID),我将获得该用户的订单。所以查询的基础是有效的 - 我如何表达'is null'位是错误的。
可能与以下事实有关:在.NET项目中,Order对象包含一个复杂的User对象,而在数据库中,Orders表只包含整数(ID),它是User表的外键。
仍然 - 由于' 和User.ID = 33 '按预期工作,我不遵循为什么' 为空 '没有。
This answer suggests I need to switch of the Criteria route. This answer suggests that my current code should work.
THX
答案 0 :(得分:0)
不是构建查询语句,而是使用Query工厂方法:
Query q = new Query();
q.Criteria.Add(new Criteria("User.ID", CriteriaOperator.IsNull));
作品。