为什么Linq无法搜索阿拉伯语文本?

时间:2016-11-02 14:02:02

标签: c# entity-framework linq arabic

我的数据库中有阿拉伯文字和英文文字。我试图根据用户输入的文本从我的数据库中搜索。它可以是英语或阿拉伯语。

我正在使用SQL和Entity Framework,下面是我尝试获取与文本匹配的结果的代码部分。

  results = results.Where(c => c.ResourceValue.Contains(AnyText));

当它是英文时,我得到了正确的结果但是当它是阿拉伯语时,它会在DB中返回带有“??? s”的结果。那些结果是垃圾。

我认为问题在于阿拉伯语文本被比作“??? s”而Linq to Entity用“??? s”返回结果。

我该如何处理?

更新

我使用SQL分析器来查看针对数据库运行的查询。如所怀疑的那样,阿拉伯语输入[搜索文本]并不彻底,但它已经像'??? s'

那样消失了
exec sp_executesql N'SELECT  
[Extent1].[ResourceValue] AS [ResourceValue]  
FROM (SELECT      
[Table].[ResourceValue] AS [ResourceValue]   
FROM [dbo].[Table] AS [VpStringResource])
AS [Extent1]  WHERE ([Extent1].[ChannelID] IN (@p__linq__0,0)) AND (( CAST(LEN([Extent1].
[ResourceValue]) AS int)) <> 0) AND ([Extent1].[ResourceValue] LIKE @p__linq__1 ESCAPE 
''~'')',N'@p__linq__0 smallint,@p__linq__1 varchar(8000)',@p__linq__0=2,
@p__linq__1='%??????%'

要重现此问题,

正如我所提到的,你可以使用任何sql表。添加nVarchar(max)类型的列。在表格中添加一些阿拉伯文字。在C#中使用Entity Framework并尝试使用问题中的行。像

Context.Table.Where(c => c.ResourceValue.contains("اختبار")) 

1 个答案:

答案 0 :(得分:2)

经过深入研究,我找到了解决自己问题的方法。

results = results.Where(c => c.ResourceValue.Contains(EntityFunctions.AsUnicode(AnyText)));

我还必须导入using System.Data.Entity.Core.Objects;

希望这会对某人有所帮助。感谢您搜索解决方案的所有意见和提示。