将查询表达式用于 Unicode 字符串和 LINQ

本文关键字:字符串 LINQ Unicode 用于 查询 查询表 表达式 | 更新日期: 2023-09-27 18:33:25

我正在使用LINQ,并且我有一个数据库,其中包含用于存储本地内容(非英语字符(的列。现在我想使用 linq 进行查询,如下所示

var desc = from p in db.GetDesc                            
           where  p.Category.Contains("xxxx".ToString())
           orderby p.Date descending
           select p;

此处的类别列包含 unicode 字符串,上面的查询字符串不起作用。如何在 LINQ 中使用自然语言查询?

将查询表达式用于 Unicode 字符串和 LINQ

Unicode 通常应该可以很好地与 Linq to SQL 和 Linq to Entities 针对 SQL Server(我假设您正在使用(。 事实上,您的查询应该是

var desc = from p in db.GetDesc                            
           where  p.Category.Contains("xxxx")
           orderby p.Date descending
           select p;

无需使用 .ToString((,因为"xxxx"已经是一个Unicode字符串。

问题似乎出在SQL Server上。 我针对包含您的埃塞俄比亚字符的表格尝试了您的查询,正如您所说,它不起作用。 如果我查询.包含("ስፖርት"(,则返回所有行。

直接运行 SQL 具有相同的结果。

尝试这样的简单查询失败(返回所有行(

select * from TestTable where Title like N'%' + NCHAR(0x1275) + N'%'

这里0x1275是 ት 字符的 Unicode 码位。

如果我们查看 NCHAR 的 SQL 文档,我们会发现仅支持高达 4000 的 Unicode 代码点。不幸的是,0x1275 = 4725,所以看起来SQL Server(即使是2012(不支持埃塞俄比亚字符。

在阅读了 4000 是限制之后,测试表明使用 NCHAR(3129( 运行上述简单查询成功(在我的例子中不返回任何行(,但>= 3130 失败(返回所有行(。