c# - 为什么 Linq 无法搜索阿拉伯文本?

标签 c# entity-framework linq arabic

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

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

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

当它是英语时,我得到了正确的结果,但是当它是阿拉伯语时,它在数据库中返回带有“???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("اختبار")) 

最佳答案

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

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

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

希望这对某人有帮助。感谢所有搜索解决方案的评论和提示。

关于c# - 为什么 Linq 无法搜索阿拉伯文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40381879/

相关文章:

c# - 将所有查询与 Elasticsearch 索引匹配

c# - Xamarin 应用程序在调试时运行但在发布时崩溃

c# - Entity Framework 查询说找不到我从未指定的列的列

c# - LINQ Group By 多个参数或字段

c# - 请 LINQ 查询帮助,对于每个作品?

c# - 传递空的 SQL 参数给出错误

c# - 从静态类访问 HttpContextBase 对象

c# - Entity Framework 迁移模型优先

entity-framework - 更新 Entity Framework v4 中的非标量实体

c# - 如何从 DataContext 的跟踪机制中分离 LINQ-to-SQL 数据对象?