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

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

например.

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

Ответ 1

Попробуйте следующее:

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

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

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

...

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == value)

Ответ 2

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

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

ОБНОВЛЕНИЕ

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

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

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