2011-08-28 59 views
0

我建設,需要返回的訂單,其中用戶的ID爲null HQL查詢:查找空的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的直接查詢返回幾十。

如果我使用相同的查詢,但更換「爲空」與「33」(一個有效的用戶ID),我會得到用戶的訂單。所以查詢的基礎是有效的 - 我如何表達'空'位是錯誤的。

可能與事實有關,在.NET項目中,Order對象包含一個複雜的User對象,在數據庫中,Orders表只保存整數(ID),這是用戶表的外鍵。

不過 - 因爲 '和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

而不是建立一個查詢語句,使用查詢工廠方針:

 Query q = new Query();    
     q.Criteria.Add(new Criteria("User.ID", CriteriaOperator.IsNull)); 

作品。