你会怎么做?
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)
无济于事。
答案 0 :(得分:2)
如果使用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中,您可以切换'
|
并切换LTRIM
和RTRIM
。
答案 1 :(得分:0)
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>();