/// <summary> /// Gets instance of an offer. /// </summary> /// <param name="offerId">The offer identifier</param> /// <returns>The offer instance</returns> public virtual Offer GetOffer(string offerId) { CatalogServiceReadOnlyDbContext context = new CatalogServiceReadOnlyDbContext(new Uri(Resources.MarketplaceEndpoint)); var offers = from o in context.Offers where o.OfferIdentifier == offerId select o; return(offers.FirstOrDefault <Offer>()); }
/// <summary> /// Gets available Windows Azure offers from the Marketplace. /// </summary> /// <param name="countryCode">The country two character code. Uses 'US' by default </param> /// <returns>The list of offers</returns> public virtual List <WindowsAzureOffer> GetAvailableWindowsAzureOffers(string countryCode) { countryCode = string.IsNullOrEmpty(countryCode) ? "US" : countryCode; List <WindowsAzureOffer> result = new List <WindowsAzureOffer>(); List <Offer> windowsAzureOffers = new List <Offer>(); CatalogServiceReadOnlyDbContext context = new CatalogServiceReadOnlyDbContext(new Uri(Resources.MarketplaceEndpoint)); DataServiceQueryContinuation <Offer> nextOfferLink = null; do { DataServiceQuery <Offer> query = context.Offers .AddQueryOption("$filter", "IsAvailableInAzureStores") .Expand("Plans, Categories"); QueryOperationResponse <Offer> offerResponse = query.Execute() as QueryOperationResponse <Offer>; foreach (Offer offer in offerResponse) { List <Plan> allPlans = new List <Plan>(offer.Plans); DataServiceQueryContinuation <Plan> nextPlanLink = null; do { QueryOperationResponse <Plan> planResponse = context.LoadProperty( offer, "Plans", nextPlanLink) as QueryOperationResponse <Plan>; nextPlanLink = planResponse.GetContinuation(); allPlans.AddRange(offer.Plans); } while (nextPlanLink != null); IEnumerable <Plan> validPlans = offer.Plans.Where <Plan>(p => p.CountryCode == countryCode); IEnumerable <string> offerLocations = offer.Categories.Select <Category, string>(c => c.Name) .Intersect <string>(SubscriptionLocations); if (validPlans.Count() > 0) { result.Add(new WindowsAzureOffer( offer, validPlans, offerLocations.Count() == 0 ? SubscriptionLocations : offerLocations)); } } nextOfferLink = offerResponse.GetContinuation(); } while (nextOfferLink != null); return(result); }