2017-04-19 5 views
0

非常に基本的な質問ですが、私の問題を解決するためには見えません。 HTML形式の文字列を含むデータベースを照会していますが、質問したいテキストのみですが、RegexでHTMLタグを削除して、それに含まれていますが、次のエラーメッセージで失敗します。 C#Asp.netは、HTMLタグの例外なしでHTML形式の文字列をクエリします。

   queryString = queryString.Replace("\"", string.Empty); 
       flagedIssues = 
        flagedIssues.Where(
         i => 
          Regex.Replace(i.Description, "<.*?>", string.Empty).Contains(queryString) || 
          i.IssueTagses.Any(t => t.Tag.Contains(queryString)) || 
          i.Category.Description.Contains(queryString)); 
      } 

どのように私はこのエラーを解決し、私の説明からテキストを得ることができますか?

UPDATE

ので

この怒鳴るを反映するが、私の機能はLINQ Mabye明らかにこの波平によって認識されていないと言って、新たなエラーメッセージを取得するためのコードを追加提案として、私は、HTML敏捷性パックを試してみました私の最初の質問ではなく、私はLINQは、単純なアプローチは、以下に正規表現を使用することでしょうRegex.Replaceや私の方法

if (!string.IsNullOrWhiteSpace(queryString)) 
      { 
       queryString = queryString.Replace("\"", string.Empty); 
       flagedIssues = 
        flagedIssues.Where(
         i => 
          CleanHtml(i.Description).Contains(queryString) || 
          i.IssueTagses.Any(t => t.Tag.Contains(queryString)) || 
          i.Category.Description.Contains(queryString)); 
      } 
private string CleanHtml(string dirtyString) 
    { 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(dirtyString); 
     return doc.DocumentNode.InnerText; 
    } 

答えて

1

のいずれかを実行することはできませんとのIEnumerableにこれを変換し、それを返すようにしようとするとエラーが来ますコンテキスト:

return Regex.Replace(input, "<.*?>", String.Empty); 

次に、返された文字列にあなたが探しているものが含まれているかどうかを確認できます。

これはHTMLタグのすべてのケースをカバーしていないため、これは最適な解決策ではありません。 より良い解決策としてHTML Agility Packを使用することを検討してください。

+0

簡単な質問return文でこれを実装しても、Where句を使用しても、私が望むコンテキストに合わせることができます。 – Harry

+0

最初にWhere句を使用する理由は何ですか?返される文は、Enumerableオブジェクト型ではない文字列です。したがって、Where節は使用できません。 –

関連する問題