c# – linq搜索法语字符
作者:互联网
我是usint EF,有一个简单的LINQ语句,想要搜索单词.
所以有文本框搜索和提交按钮.
当searchtext包含“march”时,它会找到例如. “desmarchés”,但如果我搜索“marché”,它就找不到了.所以这是法国人的角色.
listAgendaItems = dc.agenda.Where(a =>
a.libelle_activite.Contains(searchText)
).ToList<agenda>();
数据库和表议程具有扩展属性 – >整理:French_CI_AS
那么我怎么能确保我也得到法语单词呢?比如“é,à”等
我也试图寻找“马尔凯”,但它没有找到“marchés”.
解决方法:
您的排序规则French_CI_AS是“Case-Insensitive”,“Accent-Sensitive”.如果您希望查询“marches”以匹配“marchés”,则需要使用French_CI_AI作为排序规则.在大多数语言中,这实际上不是母语使用者想要的,因为重音在语义上很重要,但这可能取决于环境或背景.
实际上,如果您的用户总是希望对重音不敏感的搜索,您应该在表(或特定字段)上将该collation属性设置为AI而不是AS.否则,如果需要很少,您可以基于每个查询将排序规则应用于MS Sql中的表;请记住,如果该整理没有索引,则可能会产生大量的性能成本.但是,当您执行%通配符%查询时,这可能几乎无关紧要,因为在这种情况下,您通常会进行全表扫描.
我检查的最后一个,无法直接在Linq查询中指定排序规则,因此如果您在临时基础上执行不区分大小写,则需要在数据上下文中使用direct-to-sql查询.
编辑:
根据您的评论,听起来您允许将HTML内容存储在数据库中.您的表中有数字字符引用,SQL Server一无所知,因为它们是HTML,XML和SGML的一个特性.如果这些字符是合适编码的字符串文字,则只能进行此搜索.
NVARCHAR将以Unicode格式存储内容,特别是UTF-16,而VARCHAR将使用Windows-1252和法语校对.
如果您通过Web表单接受此输入,请确保页面编码是合适的.如果您只支持现代浏览器(基本上是IE5),UTF-8得到很好的支持,因此您应该考虑将UTF-8用于所有请求和响应.
确保在web.config中,你有这样的东西:
<configuration>
<system.web>
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8" />
</system.web>
</configuration>
如果您已经在数据库中存储了包含这些数字字符引用的数据,则可以通过翻译& #ddddd;来取消它们.进入文字UTF-16序列,并再次存储它们.确保您不会意外地忽略语义上重要的NCR,例如大于,小于或者和号的代码点.
标签:c,collation,linq-to-entities,globalization 来源: https://codeday.me/bug/20190630/1340938.html