LINQ 查询 Web Service(LINQ to Bing)

LINQ 可以查询对象集合(object collection)、SQL、实体(entities)和 XML。想要扩展它的功能,有两种选择:实现一个自定义的 LINQ Provider,或者将待查询目标转换成已有实现的一种。第二种方案通常比较容易实现,Bing API演示了使用 LINQ XML结果转换成自定义对象的过程,代码如下:

internal class SearchResult
{
    public string Title { get; set; }
    public string Url { get; set; }
    public string Description { get; set; }
}

 
internal class Bing
{
    public string AppId { get; set; }
    private const string BingNameSpace = "http://schemas.microsoft.com/LiveSearch/2008/04/XML/web";
 
    public Bing(string appId)
    {
        this.AppId = appId;
    }
 

    public IEnumerable<SearchResult> QueryWeb(string query)
    {
        string escaped = Uri.EscapeUriString(query);
        string url = BuildUrl(escaped);
        XDocument doc = XDocument.Load(url);
        XNamespace ns = BingNameSpace;
        IEnumerable<SearchResult> results = 
            from sr in doc.Descendants(ns + "WebResult")
            select
                new SearchResult
                {
                    Title = sr.Element(ns + "Title").Value,
                    Url = sr.Element(ns + "Url").Value,
                    Description = sr.Element(ns + "Description").Value
                };
        return results;
    }

    private string BuildUrl(string query)
    {
        return "http://api.search.live.net/xml.aspx?" + "AppId=" + AppId +
            "&Query=" + query + "&Sources=Web" +
            "&Version=2.0" + "&Web.Count=10" + "&Web.Offset=0";
    }
}
 

internal class LinqToBing
{
    //#error Get your own AppId at http://www.bing.com/developers/
    private const string AppId = "YOUR APPID HERE";

    private static void Main(string[] args)
    {
        Bing search = new Bing(AppId);
        string query = "Visual Studio 2010";
        IEnumerable<SearchResult> results = search.QueryWeb(query);
        foreach (SearchResult result in results)
        {
            Console.WriteLine(
                "{0}" + Environment.NewLine + "\t{1}" + Environment.NewLine + 
                "\t{2}" + Environment.NewLine,
                result.Title, result.Url, result.Description);
        }
        Console.ReadKey();
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值