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

时间:2010-01-21 00:48:01

标签: nhibernate

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

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

有人可以帮我这个吗?谢谢!

4 个答案:

答案 0 :(得分:4)

您可能需要以下内容:

ICriteria a = session.CreateCriteria(typeof(A));
a.add(Restrictions.Not(Restrictions.Eq("Message", " "));
a.add(Restrictions.Not(Restrictions.Eq("Message", string.Empty));

虽然,你的第一个并没有真正检查null,但它正在检查一个空格。

答案 1 :(得分:3)

我没有尝试过这个,但是下面的内容应该有效:

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

答案 2 :(得分:1)

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

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

限制和表达的这种组合按预期工作;缩小所有空字符串。我不知道为什么我不能提前达到这些结果,即使:

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

感谢所有尝试过的人。

答案 3 :(得分:0)

你真正需要的是:

ICriteria crit = session.CreateCriteria(typeof(theType))
.Add(Restrictions.Not(Restrictions.Eq("Msg", string.Empty)))
.Add(Restrictions.IsNotNull("Msg"))

这对我来说很好,并且探查器显示正确的SQL,例如:

msg<>'' and msg is not null. 

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