Nhibernate c#检索空值的条件



我需要检索文件的状态文件= 10和空值形成一个可空VARCHAR2列从oracle数据库

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

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中没有索引(至少在几年前我使用它时),并且在大表中查找空值可能非常慢。

ICriteria criteria = NHibernateSession.CreateCriteria(persitentType);  
criteria.Add(Restrictions.Or (
    Restrictions.Eq ("StatusFile", 10), 
    Restrictions.IsNull ("StatusFile)
));

.List()既然Stefan Steinegger的答案是"and",那你为什么不试试disjunction("or")呢?像这样,-

var query = Session.QueryOver<PersistentType>();
var disjunction = new Disjunction();   
disjunction.Add(Restrictions.On<PersistentType>(obj => obj.statusFile == 10));
disjunction.Add(Restrictions.On<PersistentType>(obj => obj.statusFile == null));
var queryResult = query.Where(disjunction).List<PersistentType>();

或简单,

var queryResult = Session.QueryOver<PersistentType>()
    .Where(obj => obj.statusFile == 10 || obj.statusFile == null).List<PersistentType>();

最新更新