Как сохранить значения данных IEnumerable <> в таблице SQL в asp.net? - PullRequest
2 голосов
/ 18 января 2012

Я использую 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 <>, который использует LINQ для извлечения значений.

Пожалуйста, предложите.

Ответы [ 2 ]

3 голосов
/ 18 января 2012

Вы можете иметь пользовательский класс со структурой

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-файл в своей БД и извлекайте его по мере необходимости.

Учебник, объясняющий, как сериализовать объект в XML и десериализовать обратно в объект .

Надеюсь, это работает для вас.

1 голос
/ 18 января 2012

Наименее мешающий способ:

var IcanbeQueried = myIEnumerable.AsQueryable();

Тогда вы можете сохранить свой код, вам нужно только преобразовать его в IQueryable, как это.

...