我需要使用状态文件= 10检索文件,并且空值从Oracle数据库中形成可为空的VARCHAR2列。

经过一番搜索,我发现了以下内容:

ICriteria criteria = NHibernateSession.CreateCriteria(persitentType);
criteria.Add(Expression.In("StatusFile", 10));
criteria.Add(Restrictions.IsEmpty("StatusFile"));


在SQL中将是这样的:

select attstatus from table where file_tmode = 'P'and  (status is null or status = 10);


如果我删除了最后一行,那么它可以工作,但是我找不到能够为空值添加条件的方法。

我该怎么办?

最佳答案

您尝试过IsNull吗?

NHibernateSession.CreateCriteria(persitentType)
  .Add(Expression.In("StatusFile", 10))
  .Add(Expression.IsNull("StatusFile"));


使用or

NHibernateSession.CreateCriteria(persitentType)
  .Add(Expression.In("StatusFile", 10)
    || Expression.IsNull("StatusFile"));


请注意,在oracle中(至少几年前,当我使用它时)没有为null编制索引,并且在大型表中查找null值可能非常慢。

08-25 13:06