Как сделать предложение без учета регистра в LINQ-to-NHibernate с поставщиком Oracle? - PullRequest
2 голосов
/ 19 февраля 2010

Например, учитывая следующий код, как можно сделать сравнение строк без учета регистра?

        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 ]

3 голосов
/ 19 февраля 2010

Насколько я могу судить, NHibernate Linq не поддерживает сопоставление без учета регистра.Это не проблема для SQL Server, который не учитывает регистр, но, очевидно, для Oracle.Я думаю, что для этого вам придется использовать Criteria API или HQL.

1 голос
/ 01 мая 2015

При использовании nHibernate QueryOver вы можете использовать IsInsensitiveLike с MatchMode.Exact. Это делает его нечувствительным к регистру соответствием, и «Точное» означает, что оно будет точно соответствовать «Джону» вместо поиска «Джонсона» и т. Д.

var foo = session.QueryOver<Customer>()
    .Where(x => x.Firstname.IsInsensitiveLike("John", MatchMode.Exact)).List();
0 голосов
/ 10 марта 2010

Только для справки, вот пример Criteria API:

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

Логический параметр в конце метода EqExpression определяет нечувствительность к регистру.

...