用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中这个Item的记录是“Woods泰勒“,不返回任何东西,因为这需要等于列。

或者例如“Maikol Smith”,并且在专栏中记录的是“Maikol Smith Jonhson”,它不会返回任何东西。

那么,在这种情况下我能做些什么呢? 做出好的过滤器。


使用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%'
链接地址: http://www.djcxy.com/p/37093.html

上一篇: Filter to search in a column with NHibernate

下一篇: want to add two different tables(classes) in one hibernae criteria