从列表中获取特定项目的简单代码

Simple code to get specific item from a list

我有一个 a 标签列表。我想获得一个包含字符串的 a 标签。 我使用了下面的代码,一切正常。

string mainLink = "";
List<HtmlNode> dlLink = new List<HtmlNode>();
dlLink = doc.DocumentNode.SelectNodes("//div[@class='links']//a").ToList();

foreach (var item in dlLink) {
  if (item.Attributes["href"].Value.Contains("prefile"))
   {
     mainLink = item.Attributes["href"].Value;
   }
}

但是我想写一个简单的代码

var dlLink = doc.DocumentNode.SelectNodes("//div[@class='link']//a").ToList().Where(x => x.Attributes["href"].Value.Contains("prefile")).ToList().ToString();

但是它不起作用,我什么也没得到。

您的 foreach 正在设置 mainLink 字符串,但您的 linq 链正在对列表结果使用 ToString

转换你的代码,你会得到这样的东西:

mainLink  = doc.DocumentNode.SelectNodes("//div[@class='links']//a")
                            .Where(item => item.Attributes["href"].Value.Contains("prefile"))
                            .Select(item => item.Attributes["href"].Value)
                            .Last(); 

我使用 Select 只获取 href 值,并像您的 foreach 那样获取最后一个值,也许您需要验证这最后一步,使用 LastOrDefaultFirst、等等

您也可以使用 LastFirst 代替 Where 条件:

mainlink = doc.DocumentNode.SelectNodes("//div[@class='links']//a")
                           .Last(item => item.Attributes["href"].Value.Contains("prefile"))
                           .Attributes["href"].Value;