例如,给定以下代码,如何使字符串比较不区分大小写?
var query = from employeeGroup in _session.Linq<EmployeeGroup>()
from employee in employeeGroup.Employee
where employee.UserName == username
select employeeGroup.EmployeeGroupName;
NHibernate.Linq.SqlClient.SqlClientExtensions.Upper()方法可能有所帮助,但这似乎只适用于SQL Server。
如果我使用System.String类进行比较,我会收到一个错误:“不能在没有投影的条件下使用子查询。”我相信这是因为NHibernate没有直接映射到SQL。
答案 0 :(得分:3)
据我所知,NHibernate Linq does not support不区分大小写匹配。对于不区分大小写但显然适用于Oracle的SQL Server,这不是问题。我认为你必须使用Criteria API或HQL。
答案 1 :(得分:1)
使用nHibernate QueryOver时,可以将IsInsensitiveLike与MatchMode.Exact一起使用。这使得它不区分大小写,并且&#34; Exact&#34;意味着它将匹配&#34; John&#34;正好与发现&#34;约翰逊&#34;等
var foo = session.QueryOver<Customer>()
.Where(x => x.Firstname.IsInsensitiveLike("John", MatchMode.Exact)).List();
答案 2 :(得分:0)
仅供参考,以下是Criteria API示例:
session.CreateCriteria(typeof(Customer))
.Add(new Expression.EqExpression("Firstname", "John", true))
.List<Customer>();
EqExpression方法结尾处的布尔参数确定不区分大小写。