Me encantan las extensiones de C# 3.0 y LINQ
Estaba embebiendo una búsqueda en LIVE en una aplicación y fijáos del código anterior (VS2005) al nuevo (VS2008) lo que cambia. Y hacen lo mismo:
Antes:
MSNSearchService s = new MSNSearchService();
SearchRequest searchRequest = new SearchRequest();
int arraySize = 1;
SourceRequest[] sr = new SourceRequest[arraySize];
sr[0] = new SourceRequest();
sr[0].Source = SourceType.Web;
searchRequest.Query = "live search";
searchRequest.Requests = sr;
searchRequest.AppID = "YOUR_APP_ID_GOES_HERE";
searchRequest.CultureInfo = "en-US";
SearchResponse searchResponse;
searchResponse = s.Search(searchRequest);
foreach (SourceResponse sourceResponse in searchResponse.Responses)
{
Result[] sourceResults = sourceResponse.Results;
WebSites[] retWebSites = new WebSites[sourceResponse.Total];
int i=0;
foreach (Result sourceResult in sourceResults)
retWebSites[i++] = new WebSite(sourceResult.Url);
}
return(retWebSites);
Y ahora:
SearchRequest liveSearchRequest = new SearchRequest();
liveSearchRequest.Query = sString;
liveSearchRequest.Requests = new SourceRequest[1]
{ new SourceRequest() { Source = SourceType.Web } };
liveSearchRequest.AppID = "YOUR_APP_ID_GOES_HERE";
liveSearchRequest.CultureInfo = "en-US";
MSNSearchPortTypeClient liveSearch = new MSNSearchPortTypeClient();
SearchResponse liveSearchResponse =
liveSearch.Search(liveSearchRequest);
var p = from res in liveSearchResponse.Responses[0].Results
select new WebSite() { sURI = res.Url };
return(p.ToArray<WebSite>());
He usado la inicialización en constructores para el Live.Requests y LINQ para construir el array de retorno