我使用anglesharp来解析网页,然后发现可能是联系页面的链接。
这是我的代码:
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值。我想只为每个PathName
取一个值,但select / distinct不起作用。
我是否必须创建自己的自定义比较器,或者有办法改变我的linq查询?我不需要任何其他数据,只需要主机和路径名。
答案 0 :(得分:1)
正如Reza所说,ToLower()
是必需的,更简单的方法是首先选择pathName
,然后进行过滤:
var contacts = links.Select(x => ((IHtmlAnchorElement)x).PathName.ToLower())
.Where(pathName => pathName.Contains("contact"))
.Distinct();