c# – NHibernate Queryable不允许字符串比较
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – NHibernate Queryable不允许字符串比较,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1587字,纯文字阅读大概需要3分钟。
内容图文
我有以下代码
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 – 布尔Equals(System.String,System.StringComparison)与源NHibernate.
这似乎意味着错误来自LINQ lambda表达式,我试图过滤NHibernate查询
user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)
我使用NHibernate Queryable错了吗?我希望它生成的等效SQL是
select * from User where emailAddress = @emailAddress
所以我只能通过数据网络返回一行.
解决方法:
我看到你的问题/你想要的两个大问题:
>您所需的SQL查询与您的字符串比较方法不兼容.比较“StRiNg”和“string”时,字符串比较方法将返回true,因为它会忽略字符串的大小写,而在比较这些字符串时,SQL查询将返回false.如果要在比较时忽略大小写,则应将查询更改为:
repository.GetItemsAsQuery().如果(
user => user.EmailAddress.ToLower()== emailAddress.ToLower());
如果我没有弄错,NHibernate已经可以实现.
>您的下一个重大问题是尝试在SQL查询中进行文化感知比较. NHibernate还没有这个功能.如果您需要文化感知字符串比较SQL查询,则必须在纯SQL中编写这些查询.但是,对于简单的相等比较,您可能不会遇到问题:只需使用==运算符进行字符串比较,您就可以了.
希望能帮助到你!
内容总结
以上是互联网集市为您收集整理的c# – NHibernate Queryable不允许字符串比较全部内容,希望文章能够帮你解决c# – NHibernate Queryable不允许字符串比较所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。