2015-09-12 41 views
0

我正在使用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查询?我不需要任何其他数据,只需要主机和路径名。

+1

鲜明必须的工作,可能是你忘记区分大小写,所以加ToLower将( )表达式结尾:((IHtmlAnchorElement)x).PathName.ToLower() –

+0

是的,你是对的!谢谢 – Guerrilla

回答

1

正如礼说,ToLower()是必要的,更简单的方法是选择pathName第一,然后执行过滤:

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