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()メソッドが役立つ場合がありますが、これはSQLServerでのみ使用できるようです。

System.Stringクラスを使用して比較を行うと、「射影なしで条件にサブクエリを使用することはできません。」というエラーが発生します。これは、NHibernateがSQLに直接マッピングできるものがないためだと思います。

4

3 に答える 3

3

私の知る限り、NHibernateLinqは大文字と小文字を区別しないマッチングをサポートしていません。これは、大文字と小文字を区別しないSQL Serverの場合は問題ではありませんが、明らかにOracleの場合は問題になります。これには、CriteriaAPIまたはHQLを使用する必要があると思います。

于 2010-02-19T16:11:33.930 に答える
1

nHibernate QueryOverを使用する場合、MatchMode.ExactでIsInsensitiveLikeを使用できます。これにより、大文字と小文字が区別されない一致になります。「完全」とは、「ジョン」と完全に一致することと、「ジョンソン」を検索することなどを意味します。

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

参考までに、CriteriaAPIの例を次に示します。

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

EqExpressionメソッドの最後にあるブールパラメータは、大文字と小文字を区別しないことを決定します。

于 2010-03-10T09:31:28.107 に答える