我有以下代碼NHibernate的可查詢不允許字符串比較
var results =
repository.GetItemsAsQuery<User>().Where(
user => user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase));
return results.Any();
庫只是我周圍NHibernate會話的包裝和方法具有以下簽名
public IQueryable<T> GetItemsAsQuery<T>()
{
try
{
CheckHasErrored();
return _connection.Session.Query<T>();
}
catch (Exception ex)
{
HasErrored = true;
throw new DataRepositoryException(string.Format("Error getting collection of items of type '{0}'", typeof(T).Name), "DataRepository.GetItems<>", ex);
}
}
當我運行的第一個方法,我得到了與源NHibernate的錯誤NotSupportException - 布爾等於(System.String,System.StringComparison)。
這似乎意味着該錯誤是從我試圖過濾的
user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)
NHibernate的查詢LINQ lambda表達式我使用NHibernate的可查詢的錯誤來了嗎?我想要它生成的等效SQL是
select * from User where emailAddress = @emailAddress
因此,我只在數據網絡中返回一行。
我不確定你使用的是什麼數據庫。默認情況下,SQL Server中的文本比較不區分大小寫,在這種情況下,可以使用標準的'=='或'.Equals(string)'。 –