2009-07-16 7 views
0

Je dispose de la fonction + code suivante pour analyser et interroger une requête de service web, puis en théorie stocker les résultats dans l'application (car il suffit de la rafraîchir une fois par jour, ce qui est heureusement l'application se rafraîchit).Traitement de LINQ/HttpContext.Application & WebServices

//tocommondata is a reference to the common stuff in the webservice 
var dCountries = toCommonData.PropertyCountries; //KeyValuePair 
var dRegions = toCommonData.Regions;//Array 
var dAreas = toCommonData.Areas;//Array 


var commonDAT = (from c in dCountries 
       join r in dRegions on c.Key equals r.CountryCode 
       join a in dAreas on r.Id equals a.RegionId 
       join p in dResorts on a.Id equals p.AreaId 
       select new CommonSave 
       { 
        Key = c.Key, 
        Value = c.Value, 
        Id = r.Id, 
        Name = r.Name, 
        dAreasID = a.Id, 
        dAreasName = a.Name, 
       } 
       ).ToList().AsQueryable(); 


HttpContext.Current.Application["commonDAT"] = commonDAT; 

Ce bit fonctionne très bien

foreach (var item in commonDAT) 
{ 
    Response.Write(item.value); 

} 

** Idéalement, je veux puis tirez sur la appmemory pour que je puisse alors accéder aux données, ce qui est là où je l'ai essayé divers (probablement stupide) des méthodes pour utiliser l'information. Tout le tirant me cause des problèmes: o (**

//This Seems to kinda work for at least grabbing it (I'm probably doing this REALLY wrong). 
IQueryable appCommonRar = (IQueryable)HttpContext.Current.Application["commonDAT"]; 


Réponse Marqué comme (enlever le .AsQueryable()) Exemple rapide

Juste pour en faire une réponse verbeuse, un moyen rapide de re-interroger et afficher un resultset ...

List<CommonSave> appcommon = (List<CommonSave>)HttpContext.Current.Application["commonDAT"]; 

Response.Write(appcommon.Count()); // Number of responses 

var texst = (from xs in appcommon 
      where xs.Key == "GBR" 
      select xs.dAreasName 
      ); 

foreach (var item in texst) 
{ 
    Response.Write("<br><b>"+item.ToString()+"<b><br>"); 
} 

Espérons que quelqu'un l'utilisera.

Répondre

2

Si vous voulez l'interroger plus d'une fois, pourquoi ne pas le laisser comme une liste? Le type sera List<CommonSave>.

+0

Liste appcommon = (Liste ) HttpContext.Current.Application ["commonRAR"]; - Est-ce que de ne pas rendre - Impossible de jeter l'objet de type 'System.Linq.EnumerableQuery'1 [WebServiceTEST.CommonSave]' taper 'System.Collections.Generic.List'1 [WebServiceTEST.CommonSave]' . - –

+0

Single Dimentional je reçois (comme http://stackoverflow.com/questions/73542/ilistt-to-iqueryablet) son travail avec la classe pour accéder à la liste une fois que c'est dans l'appmem que je ne reçois pas ... –

+0

J'ai dit laisser comme une liste. Vous avez (linq) .ToList(). ToQuery(). Il suffit de le laisser comme (linq) .ToList(). –