0

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

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

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

4

1 回答 1

2

一般来说,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 上。我尝试对包含您的埃塞俄比亚字符的表进行查询,但正如您所说,它不起作用。如果我查询 .Contains("ስፖርት") 则返回所有行。

直接运行 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 失败(返回所有行)。

于 2012-05-05T16:40:48.367 回答