过滤以使用NHibernate搜索列

时间:2011-06-23 19:48:02

标签: hibernate nhibernate

我需要创建一个过滤器来搜索sql中的表的一列。

我有两种方法,第一种方法接收字符串(Name或LastName)并返回Collection<Employee>

         public ICollection<Employee> GetEmployee_ByName(string Name)
         {
           ICollection<Employee> employee;
           using (ISession session = NHibernateSessionBuilder.OpenSession())
           {
              employee = session.CreateCriteria(typeof(Employee)).Add(Restrictions.Eq("Name", Name)).List<Employee>();
              if (employee.Count == 0)
              {
                employee = session.CreateCriteria(typeof(Employee)).Add(Restrictions.Eq("LastName", Name)).List<Employee>();
              }
               return employee;
            }
          }

问题在于CreateCriteria(typeof(Employee)).Add(Restrictions.Eq("LastName", Name))如果方法收到一个字符串,例如:“Woods”,而在 LastName 列中,此项目的记录是“Woods Taylor”,它不会返回任何内容,因为需要与列相等。

或者例如“Maikol Smith”并且在专栏中记录的是“Maikol Smith Jonhson”并没有返回任何内容。

那么,在这种情况下我该怎么办?做一个好的过滤器。

1 个答案:

答案 0 :(得分:1)

使用Like代替Eq ...

 employee = session
    .CreateCriteria(typeof(Employee))
    .Add(Restrictions.Like("LastName", "%" + name + "%"))

您当前的代码生成如下SQL:

select ... from ... where LastName = 'Woods'

通过使用Like而不是Eq,您可以生成以下SQL:

select ... from ... where LastName like '%Woods%'