为什么 Linq 无法搜索阿拉伯文本?
Why is Linq not able to search Arabic Text?
我的数据库中有阿拉伯文文本和英文文本。我正在尝试根据用户输入的文本从我的数据库中进行搜索。它可以是英语或阿拉伯语。
我正在使用 SQL 和 Entity Framework,下面是我试图获取与文本匹配的结果的代码部分。
results = results.Where(c => c.ResourceValue.Contains(AnyText));
当它是英语时,我得到了正确的结果,但是当它是阿拉伯语时,它 returns 在数据库中得到“???s”。那些结果是垃圾。
我认为问题是阿拉伯文本被比较为“???s”,而 Linq to Entity returns 我的结果是“???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 table。添加类型为 nVarchar(max) 的列。在 table 中添加一些阿拉伯文本。在 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;
。
希望这对某人有所帮助。感谢所有搜索解决方案的评论和提示。
我的数据库中有阿拉伯文文本和英文文本。我正在尝试根据用户输入的文本从我的数据库中进行搜索。它可以是英语或阿拉伯语。
我正在使用 SQL 和 Entity Framework,下面是我试图获取与文本匹配的结果的代码部分。
results = results.Where(c => c.ResourceValue.Contains(AnyText));
当它是英语时,我得到了正确的结果,但是当它是阿拉伯语时,它 returns 在数据库中得到“???s”。那些结果是垃圾。
我认为问题是阿拉伯文本被比较为“???s”,而 Linq to Entity returns 我的结果是“???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 table。添加类型为 nVarchar(max) 的列。在 table 中添加一些阿拉伯文本。在 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;
。
希望这对某人有所帮助。感谢所有搜索解决方案的评论和提示。