一般來說,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代碼點。
如果我們看一下SQL documentation for NCHAR,我們看到只支持高達4000的Unicode代碼點。不幸的是0x1275 = 4725所以它看起來像SQL Server(甚至2012)不會支持埃塞俄比亞字符。
已經讀過4000是限制,測試表明,運行上述簡單查詢與NCHAR(3129)成功(在我的情況下返回沒有行),但> = 3130失敗(返回所有行)。
你能告訴我一些你的* p.Category *文本的例子嗎? – Likurg
GetDesc包含兩列(CatId-int,Category-nvarchar)。因此,p.Category包含諸如Sport,**。**(包括英語和埃塞俄比亞字符)的值。所以,當我在我的linq查詢的WHERE表達式中傳遞Sport時,它會返回有效的結果,但是當我在WHERE clauase中傳遞**ስፖርት**時,它不返回任何內容。 – semytech
您正在使用什麼LINQ提供程序(LINQ to SQL,LINQ to Entities,...)?生成的SQL如何看起來像? – svick