次のコードがあります
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);
}
}
最初のメソッドを実行すると、エラー NotSupportException - Boolean Equals(System.String, System.StringComparison) with source NHibernate が表示されます。
これは、NHibernate クエリをフィルター処理しようとしている LINQ ラムダ式からエラーが発生していることを示しているようです。
user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)
NHibernate Queryable を間違って使用していますか? 生成したい同等のSQLは
select * from User where emailAddress = @emailAddress
したがって、データ ネットワーク全体で返される行は 1 つだけです。