问题描述
你会怎么做
Select *
from Personnel p
where p.LastName + \',\' + p.FirstName + \' \' + p.MiddleInitial LIKE @Employee + \'%\'
使用NHibernate(3.0)?到目前为止,我已经尝试过
personnel.QueryOver<Personnel>()
.WhereRestrictionOn( x => x.LastName + \',\' + x.FirstName + \' \' + x.MiddleInitial)
.IsLike(employeeName,MatchMode.Start)
无济于事。
解决方法
如果使用
Formula
将这三列映射为单个属性,它将起作用:
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table(\"Employees\");
Id(x => x.Id);
Map(x => x.Name)
.Formula(\"UPPER(LTRIM(RTRIM(FirstName + \' \' + MiddleName + \' \' + LastName)))\");
// etc.
}
}
这是一个使用SQL Server的示例,在Oracle中,您将ѭ4切换为ѭ5,并将沟渠LTRIM
和switch7 switch。
,ICriteria criteria = session.CreateCriteria(typeof(IPersonnel));
criteria.CreateCriteria(\"Personnel\",\"p\");
criteria.Add(Restrictions.Like(\"p.LastName + p.FirstName + p.MiddleInitial\",employeeName));
criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);
return criteria.List<IPersonnel>();