我需要创建一个过滤器来搜索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”并没有返回任何内容。
那么,在这种情况下我该怎么办?做一个好的过滤器。
答案 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%'