2009-07-16 2 views
0

У меня есть следующая функция + код для синтаксического анализа и запроса запроса webservice, а затем теоретически хранить результаты в приложении (так как он должен обновляться только один раз в день, к счастью, когда приложение обновляется).Работа с 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; 

Этот бит работает отлично

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

} 

** В идеале я хочу, чтобы затем вытащить его из appmemory таким образом я могу получить доступ к данным, где я пробовал разные (возможно, глупых) методов использования информации. Просто потянув ее вызывает у меня вопросы: о (**

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


Ответ, как Отмеченный (удалить .AsQueryable()) Быстрый пример

Просто, чтобы сделать этот подробный ответ, быстрый способ повторного запроса и отображения набора результатов ...

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>"); 
} 

Надеюсь использовать кому-то.

ответ

2

Если вы собираетесь запрашивать его более одного раза, то почему бы просто не оставить его в списке? Тип будет List<CommonSave>.

+0

Список appcommon = (Список ) HttpContext.Current.Application ["commonRAR"]; - Окажу, чем терпеть неудачу - Невозможно привести объект типа 'System.Linq.EnumerableQuery'1 [WebServiceTEST.CommonSave] к типу' System.Collections.Generic.List'1 [WebServiceTEST.CommonSave] , - –

+0

Отдельные размеры Я получаю (например, http://stackoverflow.com/questions/73542/ilistt-to-iqueryablet) свою работу с классом, чтобы получить доступ к списку, когда он в приложении, который я не получаю ... –

+0

Я сказал, оставить его в списке. У вас есть (linq) .ToList(). ToQuery(). Просто оставьте это как (linq) .ToList(). –