2011-06-23 201 views
0

我需要制作一个过滤器,以便在sql中的一列表中进行搜索。过滤器在NHibernate的列中搜索

我有两种方法,第一种接收字符串(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))如果方法得到的字符串,例如:“老虎伍兹”,并在列姓氏该项目的纪录是“伍兹泰勒”,不是返回任何结果,因为这需要有等于列。或者例如“Maikol Smith”,而在专栏中记录的是“Maikol Smith Jonhson”,它不会返回任何东西。

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

回答

1

使用等代替公式...

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

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

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

使用的,而不是像公式,您生成SQL类似如下:

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

非常好的谢谢! – ale