2

例如,给定以下代码,如何使字符串比较不区分大小写?

        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 进行直接映射。

4

3 回答 3

3

据我所知,NHibernate Linq不支持不区分大小写的匹配。这对于不区分大小写的 SQL Server 来说不是问题,但对于 Oracle 来说显然是这样。我认为您必须为此使用 Criteria API 或 HQL。

于 2010-02-19T16:11:33.930 回答
1

使用 nHibernate QueryOver 时,可以将 IsInsensitiveLike 与 MatchMode.Exact 一起使用。这使它成为不区分大小写的匹配,并且“精确”意味着它将完全匹配“约翰”而不是查找“约翰逊”等。

var foo = session.QueryOver<Customer>()
    .Where(x => x.Firstname.IsInsensitiveLike("John", MatchMode.Exact)).List();
于 2015-05-01T14:27:26.407 回答
0

仅供参考,这是一个 Criteria API 示例:

session.CreateCriteria(typeof(Customer))
    .Add(new Expression.EqExpression("Firstname", "John", true))
    .List<Customer>();

EqExpression 方法末尾的布尔参数确定不区分大小写。

于 2010-03-10T09:31:28.107 回答