DapperExtensions谓词中的不区分大小写的比较

时间:2016-09-13 19:39:14

标签: mysql case-insensitive dapper-extensions

我尝试在使用Dapper Extensions时对MySQL表进行不区分大小写的匹配,但是当我尝试在linq表达式中使用UpperCase时,我在字段名称上获得了一个null异常: / p>

以下是代码:

            var predicateGroup = new PredicateGroup { Operator = GroupOperator.Or, Predicates = new List<IPredicate>() };

            var term = "term";
            if (term.IsNotNullOrEmpty())
            {
                predicateGroup.Predicates.Add(Predicates.Field<Company>(p => p.company_code, Operator.Like, string.Format("%{0}%", term)));
                predicateGroup.Predicates.Add(Predicates.Field<Company>(p => p.company_name.ToUpper(), Operator.Like, string.Format("%{0}%", term)));
            }

            return Count<Company>(predicateGroup, TdsAuthConnectionString);

有人知道如何使用DapperExtensions谓词进行不区分大小写的匹配吗?

感谢您的帮助, codenewbie

1 个答案:

答案 0 :(得分:0)

p => p.company_name代码段是一个Linq Lambda Expression<Func<T, object>>表达式,告诉DapperExtensions在其内部映射中使用什么属性名称。当你在那里使用大写时,它没有指向有效的属性名称,而是指向大写函数。

如果您正在寻找数据不区分大小写,那么这是数据库引擎的一项功能。如果您使用的是Microsoft SQL Server,则数据区分大小写由数据库的排序规则控制。如果您使用的是不区分大小写的代码页,例如Latin1_General_CI_AS,那么您发送到数据库的所有查询都不区分大小写。您可以通过运行以下SQL语句来检查服务器排序规则:

SELECT SERVERPROPERTY ('Collation')

您可以找到归类列表及其案例敏感度here