Как сделать строку без учета регистра в запросе NHibernate Linq? - PullRequest
13 голосов
/ 23 марта 2012

Как сделать без учета регистра, где в запросе NHibernate Linq?

например.

//note this one doesn't work if the entry in database has lowercase
q => q.Where(entity => 
    entity.CaseInsensitiveField == DesiredField.Trim().ToUpper())

Ответы [ 2 ]

13 голосов
/ 23 марта 2012

Попробуйте это:

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == DesiredField.Trim().ToUpper())

Также я бы предложил установить параметр вне запроса:

var value = DesiredField.Trim().ToUpper();

...

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == value)
5 голосов
/ 23 марта 2012

Используйте это:

q => q.Where(entity => 
    String.Equals(entity.CaseInsensitiveField , CaseInsensitiveField , 
                  StringComparison.OrdinalIgnoreCase));

UPDATE

Похоже (по крайней мере, через LinqPad), что вышеупомянутое не будет переводиться в SQL, поэтому я бы предложил, как уже предложил ivowiblo:

var comparisonValue = CaseInsensitiveField.ToUpper();
q => q.Where(entity => 
    entity.CaseInsensitiveField.ToUpper() == comparisonValue);

Причиной установки ToUpper заранее является то, что процедурные функции, как правило, хуже в SQL, и поскольку это не поле базы данных, мы можем отправить его уже с заглавной буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...