用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