从列表中获取特定项目的简单代码
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
那样获取最后一个值,也许您需要验证这最后一步,使用 LastOrDefault
、First
、等等
您也可以使用 Last
或 First
代替 Where
条件:
mainlink = doc.DocumentNode.SelectNodes("//div[@class='links']//a")
.Last(item => item.Attributes["href"].Value.Contains("prefile"))
.Attributes["href"].Value;
我有一个 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
那样获取最后一个值,也许您需要验证这最后一步,使用 LastOrDefault
、First
、等等
您也可以使用 Last
或 First
代替 Where
条件:
mainlink = doc.DocumentNode.SelectNodes("//div[@class='links']//a")
.Last(item => item.Attributes["href"].Value.Contains("prefile"))
.Attributes["href"].Value;