SQL is case sensitive or case insensitive by default, but it can be changed on a per-query basis. See http://aspadvice.com/blogs/ssmith/archive/2007/09/30/Case-Sensitive-or-Insensitive-SQL-Query.aspx
In theory, I guess NH.Linq can expand WHERE clauses to use this syntax based on the StringComparison value, though it would be complicated by the many different collation levels (see http://msdn.microsoft.com/en-us/library/ms180175.aspx). In theory, the current thread culture and StringComparison value can be combined to find the "best" collation... (!) Or you can just use == or a stored procedure or custom query. On Jul 6, 2:12 pm, Chad Lee <[email protected]> wrote: > Calling ToLower() like you did would be the way to do it. That being said, > I don't think the parser is handling method calls to ToLower. A patch would > be welcome. > > On Mon, Jul 6, 2009 at 1:09 PM, André Carlucci <[email protected]>wrote: > > > Hi guys, first, thanks for this great framework. > > > I have a similar problem concerning case-insensitive search. > > > First, there is no such thing as "case-insensitive by default". I'm > > using Oracle and it does care about it. As nhibernate is database > > independent, it should care too. > > > Also, the Equals() function beeing translated to "like" is also wrong, > > since Equals means... well... equals. The result of having this > > difference (== -> = and Equals -> like) will only make a lot of people > > create low performing queries, nothing more. > > > I think the like operator should come in place when you call something > > like: > > > var query = from p in session.Linq<User>() > > where p.Name.Contains(name) > > select p; > > > And guest what: it works! > > > The problem is when I want a case-insensitive query: > > > var query = from p in session.Linq<User>() > > where p.Name.ToLower().Contains(name.ToLower()) > > select p; > > > The result is: System.ArgumentOutOfRangeException : Index was out of > > range. Must be non-negative and less than the size of the collection. > > Parameter name: index. Glup! > > > So, when using a database that cares about case in like queries, how > > to perform a case-insensitive query? > > > Thanks! > > > André Carlucci > > > On 2 abr, 01:33, Chad Lee <[email protected]> wrote: > > > Calling the .Equals method on a string generates a like query as you > > > discovered. If you want to generate a SQL =, just do: > > > p.Email == userEmail > > > > As Fabio pointed out, I am not aware of any case-insensitive search in > > SQL > > > server. It is all case-insensitive by default. > > > > On Tue, Mar 31, 2009 at 9:14 AM, Fabio Maulo <[email protected]> > > wrote: > > > > which is the SQL for caseInsensitive. > > > > > 2009/3/31 Robert Misiak <[email protected]> > > > > >> I am working on a project in which we're using session.Linq<T>() to do > > > >> a variety of searches using Lambda expressions. We don't even have > > > >> nHibernate exposed to our application - we have a service layer with > > > >> methods that take Expression<Func<T, bool>> as a parameter which call > > > >> session.Linq<T>() with the passed parameter. > > > > >> We have a large table which was performing very slowly, and our DBA > > > >> found the nHibernate was doing a SQL LIKE behind the scenes instead of > > > >> using "=" which was a contributor to the slow performance. The Lambda > > > >> expressions that were getting converted to a LIKE were like so: > > > > >> session.Linq<T>(p => p.Email.Equals(userEmail, > > > >> StringComparison.InvariantCultureIgnoreCase)); > > > > >> This leads me to the following questions: > > > > >> 1. What is the preferred way to do a case-insensitive search using > > > >> nHibernate.Linq? > > > >> 2. Is this a bug or a feature? Are there any plans to change this > > > >> behavior in the future? > > > > >> I think that it would be helpful if in future versions of > > > >> nHibernate.Linq, behavior related to case-(in)sensitivity or using SQL > > > >> LIKE was more transparent to the developer. > > > > >> FYI, in the mean-time, we've switched most of our simple queries to > > > >> use CreateCriteria(). > > > > >> Regards, > > > >> Robert Misiak > > > > > -- > > > > Fabio Maulo- Ocultar texto das mensagens anteriores - > > > > - Mostrar texto das mensagens anteriores - > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "NHibernate Contrib - Development Group" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com.ar/group/nhcdevs?hl=en -~----------~----~----~----~------~----~------~--~---
