0

angleharp を使用して Web ページを解析し、連絡先ページである可能性のあるリンクを検出しています。

これが私のコードです:

        var config = Configuration.Default.WithDefaultLoader();

        string address = "http://www.stackoverflow.com/";

        Url baseurl = new Url(address);

        var document = await BrowsingContext.New(config).OpenAsync(baseurl);

        var links = document.Links.Where(x => ((IHtmlAnchorElement)x).Host == baseurl.Host ).ToList();

        var contacts = links.Where(x => ((IHtmlAnchorElement)x).PathName.ToLower().Contains("contact")).Select(x => ((IHtmlAnchorElement)x).PathName).Distinct();

動作しますが、連絡先で PathName 値が重複しています。それぞれに対して 1 つの値のみを取得したいのですPathNameが、select/distinct が機能していません。

独自のカスタム比較子を作成する必要がありますか、または linq クエリを変更する方法はありますか? ホストとパス名だけで、他のデータは必要ありません。

4

1 に答える 1

1

Rezaが言ったように、ToLower()必要であり、より簡単なアプローチは、pathName最初のものを選択してからフィルタリングを行うことです:

var contacts = links.Select(x => ((IHtmlAnchorElement)x).PathName.ToLower())
                    .Where(pathName => pathName.Contains("contact"))
                    .Distinct();
于 2015-09-12T12:02:08.873 に答える