如何存储IEnumerable<> asp.net中SQL表中的数据值?

时间:2012-01-18 12:13:32

标签: c# asp.net sql ienumerable html-agility-pack

我正在使用HtmlAgilityPack从网页中检索信息,目前正在使用它在按钮点击方法中使用ListView控件在页面上显示值。

 protected void Button1_Click(object sender, EventArgs e)
 {
     string url = TextBox1.Text.ToString();
     var webGet = new HtmlWeb();
     var document = webGet.Load(url);
     // Below code crawl the data and store in generic IEnumerable<T> fashion //
     var TheWeb = 
           from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']//div[@class='media-data']")
           from link in info.SelectNodes("h4//a").Where(x => x.Attributes.Contains("href"))
           from content in info.SelectNodes("p").Where(y => y.HasAttributes != true)
           from author in info.SelectNodes("p[@class='article-meta']//a[@rel='author']").Where(z => z.Attributes.Contains("href"))
           from date in info.SelectNodes("p[@class='article-meta']//span")
           select new
           {
                 LinkURL = link.Attributes["href"].Value,
                 Text = content.InnerText,
                 Author = author.InnerText,
                 Date = date.InnerText
           };
     lvLinks.DataSource = TheWeb;
     lvLinks.DataBind(); 
}

但现在我想将数据存储在SQL Server中,并希望使用某些功能运行代码(而不是点击按钮)。

为此我想以其他形式存储数据而不是IEnumerable&lt;&gt;使用LINQ提取值的样式。

请建议。

2 个答案:

答案 0 :(得分:3)

您可以拥有结构

的自定义类
public class ParseData
{
    public string LinkURL { get; set; }
    public string Text { get; set; } 
    public string Author { get; set; }
    public string Date { get; set; }
}

使用您的查询填充

var TheWeb = 
       from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']//div[@class='media-data']")
       from link in info.SelectNodes("h4//a").Where(x => x.Attributes.Contains("href"))
       from content in info.SelectNodes("p").Where(y => y.HasAttributes != true)
       from author in info.SelectNodes("p[@class='article-meta']//a[@rel='author']").Where(z => z.Attributes.Contains("href"))
       from date in info.SelectNodes("p[@class='article-meta']//span")
       select new ParseData
       {
             LinkURL = link.Attributes["href"].Value,
             Text = content.InnerText,
             Author = author.InnerText,
             Date = date.InnerText
       };
var parseData = TheWeb.ToList();

现在使用System.Xml.Serialization.XmlSerializer以XML格式化这些数据。将此XML存储在数据库中,并在需要时进行检索。

Tutorial explaining how to Serialize object in XML and Deserialize back to object

希望这适合你。

答案 1 :(得分:1)

最少干扰方式:

var IcanbeQueried = myIEnumerable.AsQueryable();

然后你可以保留你拥有的代码,你只需将其转换为IQueryable就好了。