使用 IContentManager 检索 ContentPart,按不区分大小写的字段过滤
Retrieve ContentPart using IContentManager, filtered by case-insensitive field
Orchard模块开发中,如何获取字段不区分大小写过滤的ContentParts?我试过了
var name = viewModel.Name.ToUpper();
var samples = _contentManager.Query<SamplePart, SamplePartRecord>()
.Where(x => x.Name.ToUpper() == name)
.List();
我遇到了一个错误
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
但是当我尝试检索时不打扰它是否区分大小写
var name = viewModel.Name;
var samples = _contentManager.Query<SamplePart, SamplePartRecord>()
.Where(x => x.Name == name)
.List();
没有错误报告。
什么给了?
请注意,Where
子句中的表达式在某个时刻被 NHibernate 翻译为 SQL 查询。因此,您在那里可以做什么非常受限。在这种情况下,似乎不支持 ToUpper
方法。
另一件事 - SQL 服务器中的字符串比较行为取决于数据库中设置的实际排序规则。默认情况下它不区分大小写,因此任何字符串比较都会忽略大小写。因此,如果您坚持使用默认设置,那么在两个字符串上使用普通的 ==
就好了,就像您上一个示例中那样。
Orchard模块开发中,如何获取字段不区分大小写过滤的ContentParts?我试过了
var name = viewModel.Name.ToUpper();
var samples = _contentManager.Query<SamplePart, SamplePartRecord>()
.Where(x => x.Name.ToUpper() == name)
.List();
我遇到了一个错误
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
但是当我尝试检索时不打扰它是否区分大小写
var name = viewModel.Name;
var samples = _contentManager.Query<SamplePart, SamplePartRecord>()
.Where(x => x.Name == name)
.List();
没有错误报告。
什么给了?
请注意,Where
子句中的表达式在某个时刻被 NHibernate 翻译为 SQL 查询。因此,您在那里可以做什么非常受限。在这种情况下,似乎不支持 ToUpper
方法。
另一件事 - SQL 服务器中的字符串比较行为取决于数据库中设置的实际排序规则。默认情况下它不区分大小写,因此任何字符串比较都会忽略大小写。因此,如果您坚持使用默认设置,那么在两个字符串上使用普通的 ==
就好了,就像您上一个示例中那样。