使用LINQ执行搜索并忽略î或ô或ê等字符

时间:2012-05-22 12:53:14

标签: linq linq-to-sql

在我的数据库中,我有一些类似这样的文字:'AVENUEGEORGESLEMAîTRE'。正如你所看到的,'i'字符上有一个^。

是否可以使用LINQ执行搜索并忽略此特殊字符。

所以我想搜索'AVENUE GEORGES LEMAITRE'并找到'AVENUEGEORGESLEMAîTRE'。

var address = AddressRepository.Find(m => m.Street == "AVENUE GEORGES LEMAITRE").ToList();

可能?怎么样?

感谢。

2 个答案:

答案 0 :(得分:1)

尝试:

List<String> address = (from ad in addressRepository where string.Compare("AVENUE GEORGES LEMAITRE", ad.Street.ToUpperInvariant(),CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0 select ad.Street).ToList();

否则

此博客文章可能有所帮助:

详细介绍了如何从字符串中删除变音符号。

转到代码示例的底部。

替换字符后,可以比较字符串。

希望这有帮助。

http://www.siao2.com/2007/05/14/2629747.aspx

答案 1 :(得分:0)

您应修改数据库模型,以包含Street的“规范”版本以及您向用户显示或接受的“实际”版本。例如,这个规范版本可以全部大写,删除所有变音符号,并标准化为特定的Unicode normalization form

假设您有一个方法Canonicalize执行此操作(可能是a good place to start),您可以在保存地址时调用它:

var address = /* incoming data */
address.CanonicalStreet = Canonicalize(address.Street);
/* save the model */

您还可以在检索数据时使用它:

var street = "AVENUE GEORGES LEMAITRE";
street = Canonicalize(street);
var address = AddressRepository.Find(m => m.CanonicalStreet == street).ToList();