LINQ-to-NHibernate中的一个不区分大小写的Where子句如何与Oracle提供程序一起使用?

时间:2010-02-19 13:02:30

标签: nhibernate fluent-nhibernate oracle11g linq-to-nhibernate

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

        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。

3 个答案:

答案 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方法结尾处的布尔参数确定不区分大小写。