我需要检索文件的状态文件= 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>();