使用 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 服务器中的字符串比较行为取决于数据库中设置的实际排序规则。默认情况下它不区分大小写,因此任何字符串比较都会忽略大小写。因此,如果您坚持使用默认设置,那么在两个字符串上使用普通的 == 就好了,就像您上一个示例中那样。