我使用RegEx删除LINQ-SQL查询中的HTML TAGS,但抛出了以下错误:
不支持将方法
'System.String Replace(System.String, System.String, System.String)'
作为SQL执行。
Help helpDBSession = new Help();
IEnumerable<Article> articles = null;
if (lang.ToLower() == "en")
{
articles = helpDBSession.Articles.Where(artilce => artilce.NameEn.Contains(searchPattern) ||
System.Text.RegularExpressions.Regex.Replace(artilce.ContentEn, "<(.|\n)*?>",String.Empty).Contains(searchPattern));
}
else
{
articles = helpDBSession.Articles.Where(artilce => artilce.NameAr.Contains(searchPattern) ||
System.Text.RegularExpressions.Regex.Replace(artilce.ContentAr, "<(.|\n)*?>", String.Empty).Contains(searchPattern));
}
if (articles != null && articles.Count() > 0)
{
return articles.ToList();
}
答案 0 :(得分:2)
这里有两件事:
Replace
时,它会尝试将其传递给SQL Server - 这当然会失败,因为SQL没有此功能。无论如何,这都会失败,因为string.Replace
没有超载需要三个字符串。您没有解释您需要实现什么,但如果您需要在SQL中存储一些HTML,我建议您使用敏捷包解析它并使用它来清除标记,然后将结果保存到SQL Server
答案 1 :(得分:0)
根据错误消息,我假设LINQ to SQL无法转换LINQ语句的RegEx部分,因为SQLServer不支持RegEx。
你必须:
例如:
Help helpDBSession = new Help();
IEnumerable<Article> articles = null;
if (lang.ToLower() == "en")
{
articles = helpDBSession.Articles.Where(
artilce => artilce.NameEn.Contains(searchPattern)
)
}
else
{
articles = helpDBSession.Articles.Where(
artilce => artilce.NameAr.Contains(searchPattern)
)
}
if (articles != null && articles.Count() > 0)
{
if (lang.ToLower() == "en")
{
return articles.ToList().Where(
artilce => System.Text.RegularExpressions.Regex.Replace(
artilce.ContentEn,
"<(.|\n)*?>",String.Empty).Contains(searchPattern)
)
);
}
else
{
return articles.ToList().Where(
artilce => System.Text.RegularExpressions.Regex.Replace(
artilce.ContentAr,
"<(.|\n)*?>",String.Empty).Contains(searchPattern)
)
);
}
}