比较列表,如果它在SQL表列中

时间:2016-05-12 12:56:46

标签: c# sql visual-studio console sql-server-express

我有一个从网站上抓取数据的控制台应用程序,这是抓取部分:

private static void getPageThumbLinks()
{
    thumbUrlsList = new List<string>();
    HtmlWeb web = new HtmlWeb();
    web.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36";
    foreach (string value in pageLinks)
    {

        HtmlDocument doc = web.Load("http://www.example.com/" + value);
        foreach (HtmlNode nodes in doc.DocumentNode.SelectNodes("//td[@class='searchResultsSmallThumbnail']/a"))
        {
            HtmlAttribute href = nodes.Attributes["href"];
            var hreflink = href.Value;
            thumbUrlsList.Add(hreflink);
            //Console.WriteLine(hreflink);
        }
        compareToSql();
    }
}

我的列表包含一组URL thumbUrlsList和一个名为Table的MSSQL Express表,其中包含一个名为link的列。

是否可以将此列表与数据库link列进行比较,并检查它是否存在?

如果是的话,你能举个例子吗? 非常感谢。谢谢。

2 个答案:

答案 0 :(得分:2)

假设您有一个已存在于数据库中的链接列表是dbList。

var dbList = new List<string>() { "Dave", "Steve", "Pete" };

和你的新thumbList

var thumbList = new List<string>() { "Dave", "Steve", "Pete", "Paul", "Mike" };

现在要获取数据库中不存在的URL列表,请使用此

var newLinkList = thumbList.Except(dbList).ToList();

答案 1 :(得分:1)

一个简单的例子。您可以使用LINQ检查它是否存在。

private static void getPageThumbLinks()
{
    thumbUrlsList = new List<string>();
    HtmlWeb web = new HtmlWeb();
    web.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36";
    foreach (string value in pageLinks)
    {

        HtmlDocument doc = web.Load("http://www.example.com/" + value);
        foreach (HtmlNode nodes in doc.DocumentNode.SelectNodes("//td[@class='searchResultsSmallThumbnail']/a"))
        {
            HtmlAttribute href = nodes.Attributes["href"];
            var hreflink = href.Value;
            thumbUrlsList.Add(hreflink);
            //Console.WriteLine(hreflink);

            // Here is where you check if the DataTable has the link
            // Table is a DataTable containing the results of your query
            var containsLink = Table.AsEnumerable().Any(row => link == row.Field<string>("link"));

            if (containsLink) 
            {
                // do something with it
            }
        }
    }
}