一般来说,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 失败(返回所有行)。