NHibernate比较连接属性

时间:2011-05-26 08:47:34

标签: nhibernate nhibernate-3

你会怎么做?

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)

无济于事。

2 个答案:

答案 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中,您可以切换' |并切换LTRIMRTRIM

答案 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>();