Nhibernate C#-仅返回字符串属性不为null或空的对象

Nhibernate C#-仅返回字符串属性不为null或空的对象,nhibernate,Nhibernate,我正在使用ICriteria编写一个查询,它应该只返回属性“Message”有值(即不为null或空)的对象。下面是我正在使用的格式 ICriteria.Add(Restrictions.Not(Restrictions.Eq("Message", " ")); ICriteria.Add(Restrictions.Not(Restrictions.Eq("Message", String.Empty)); 有人能帮我吗?谢谢大家! 您可能需要以下内容: ICriteria a = sessi

我正在使用ICriteria编写一个查询,它应该只返回属性“Message”有值(即不为null或空)的对象。下面是我正在使用的格式

ICriteria.Add(Restrictions.Not(Restrictions.Eq("Message", " "));
ICriteria.Add(Restrictions.Not(Restrictions.Eq("Message", String.Empty));

有人能帮我吗?谢谢大家!

您可能需要以下内容:

ICriteria a = session.CreateCriteria(typeof(A));
a.add(Restrictions.Not(Restrictions.Eq("Message", " "));
a.add(Restrictions.Not(Restrictions.Eq("Message", string.Empty));
msg<>'' and msg is not null. 

虽然您的第一个不是真正检查null,而是检查单个空格。

我没有尝试过这个,但它认为以下方法应该可以工作:

ICriteria crit = session.CreateCriteria(typeof(theType))
                   .Add(Restrictions.IsNotNull("Message"))
                   .Add(Restrictions.IsNotEmpty("Message"));

最后,我发现了我正在寻找的组合

lvCriteria.Add(Restrictions.Not(Expression.Eq("Msg", string.Empty)));
这种限制和表达的结合正如预期的那样有效;缩小所有空字符串的范围。我不知道为什么我不能提前实现这些结果,即使:

lvCriteria.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)));

感谢所有尝试过的人。

您真正需要的是:

ICriteria crit = session.CreateCriteria(typeof(theType))
.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)))
.Add(Restrictions.IsNotNull("Msg"))
这对我来说很好,分析器显示正确的SQL,例如:

ICriteria a = session.CreateCriteria(typeof(A));
a.add(Restrictions.Not(Restrictions.Eq("Message", " "));
a.add(Restrictions.Not(Restrictions.Eq("Message", string.Empty));
msg<>'' and msg is not null. 
msg''和msg不为空。

由于限制,第一个答案对我不起作用。IsNotEmpty/Empty仅适用于集合(至少在NH 2.0.1中)。

已试用过。它起作用了。我想这是显而易见的,但是需要对ICriteria对象调用.Add(),如taylonr的回答所示。哦,是的,我盲目地复制了原始对象。哈哈。好的,修复了。IsNotEmpty不是只用于收集吗?顺便说一下,这是alan的回复。原始海报。我相信IsNotEmpty用于集合,但我认为IsNotNull用于任何对象(至少IsNull可以用于任何对象)。在这种情况下,对于空字符串,您可以检查字符串的长度。对于如何检查属性的长度,您有什么建议吗?