我有以下代码
var results =
repository.GetItemsAsQuery<User>().Where(
user => user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase));
return results.Any();
Repository只是我在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 - 使用源NHibernate的布尔值Equals(System.String,System.StringComparison)。
这似乎意味着错误来自LINQ lambda表达式,我试图过滤NHibernate查询
user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)
我使用NHibernate Queryable是错误的吗?我希望它生成的等价SQL是
select * from User where emailAddress = @emailAddress
所以我只能通过数据网络返回一行。
答案 0 :(得分:4)
我发现你的问题/你想要的两个大问题:
repository.GetItemsAsQuery()(其中 user =&gt; user.EmailAddress.ToLower()== emailAddress.ToLower());
如果我没有弄错,NHibernate已经可以实现。
==
运算符进行字符串比较,您就可以了。 希望它有所帮助!
答案 1 :(得分:2)
String.Compare
现在支持 NHibernate
。
答案 2 :(得分:1)
LINQ尚未与Nhibernate 100%兼容。请尝试使用String.Compare(string a, string b)
。