Nhibernate ICriteria - 检查属性值长度

时间:2010-01-22 22:55:50

标签: nhibernate

我正在尝试返回给定属性不为空的所有实体。 问题是IsNotEmpty()仅适用于集合。以下是我到目前为止采用的一般方法,显然不起作用。

ICriteria lvCriteria = NHibernateHelper.GetCurrentSession()
                                       .CreateCriteria(typeof(FunctionCall))
                                       .SetMaxResults(100)
                                       .AddOrder(Order.Desc("LogId"));

if (pvMsg.HasValue)
{                
       lvCriteria.Add(Restrictions.IsNotNull("Msg"))
                 .Add(Restrictions.IsNotEmpty("Msg"));
}

有什么建议吗?是否可以通过检查属性值的长度来实现此结果?谢谢!

4 个答案:

答案 0 :(得分:4)

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

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

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

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

感谢所有尝试过的人。

答案 1 :(得分:0)

我相信你在寻找:

.Add(Expression.IsNotEmpty("PropertyName"));

.Add(Expression.IsNotNull("PropertyName"));

答案 2 :(得分:0)

以下是我的映射和类定义:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Domain" namespace="Assembly.Domain">
  <class name="Assembly.Domain.FunctionCall, Domain" lazy="false" table="FunctionCallLog">

    <id name="LogId" column="LogId">
      <generator class="native" />
    </id>

    <property name="LogTime" column="LogTime" />
    <property name="Username" column="Username" />
    <property name="CallerIp" column="CallerIp" />
    <property name="FunctionName" column="FunctionName" />
    <property name="Parameters" column="Parameters" />
    <property name="Msg" column="Msg" />
    <property name="FileName" column="FileName" />
    <property name="TimeSpan" column="TimeSpan" />

  </class>
</hibernate-mapping>


using System;

namespace Assembly.Domain
{
    public class FunctionCall
    {
        public int LogId { get; set; }
        public DateTime LogTime { get; set; }
        public string Username { get; set; }
        public string CallerIp { get; set; }
        public string FunctionName { get; set; }
        public string Parameters { get; set; }
        public string Msg { get; set; }
        public string FileName { get; set; }
        public int TimeSpan { get; set; }
    }
}

答案 3 :(得分:0)

试试这个:

ICriteria lvCriteria = NHibernateHelper.GetCurrentSession()
                                       .CreateCriteria(typeof(FunctionCall))
                                       .SetMaxResults(100)
                                       .AddOrder(Order.Desc("LogId"));

if (pvMsg.HasValue)
{                
       lvCriteria.Add(Restrictions.IsNotNull("Msg"))
                 .Add(Restrictions.Not(Restrictions.Eq("Msg", ""));
}

可能有更紧凑的表达方式。