Как сделать строку без учета регистра, где в запросе 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 хуже, и поскольку это не поле базы данных, мы можем отправить его уже заглавными.