2012-03-13 3 views
4

Вот мой кодСписок с анонимным типом

var personalInfoQuery = from t in crnnsupContext.Tombstones.Include("ProvState") 
         join n in crnnsupContext.NursingSchools 
            on t.NursingSchool equals n.SchoolID 
         where t.RegNumber == _username 
         select new { t, n }; 

тогда я пытаюсь поставить personalInfoQuery в список, как

List<> personalInfoResult = personalInfoQuery.ToList(); 

, но как представить анонимный тип в списке?

мне нужно вставить его в кэш так Cache.Insert("personalInfo", personalInfoQuery.ToList()) затем Cache["personalInfo"] becomes an object, how can i read data from it?

ответ

3

Поскольку ваш тип должен использоваться более чем одним методом (его нужно создать одним способом и прочитать другим), использовать анонимный тип нецелесообразно. Просто создать простой тип:

public class TombstoneNursingSchool 
{ 
    public Tombstone Tombstone { get; set; } 
    public NursingSchool NursingSchool { get; set; } 
} 

создать его так:

var personalInfoQuery = from t in crnnsupContext.Tombstones.Include("ProvState") 
         join n in crnnsupContext.NursingSchools 
            on t.NursingSchool equals n.SchoolID 
         where t.RegNumber == _username 
         select new TombstoneNursingSchool { 
          Tombstone = t, 
          NursingSchool = n 
         }; 

сделать список, как это:

List<TombstoneNursingSchool> personalInfoResult = personalInfoQuery.ToList(); 

положить его в кэше, как это:

Cache.Insert("personalInfo", personalInfoQuery.ToList()) 

вытащите его из кеша и прочитайте его как thi s:

foreach(var tn in (List<TombstoneNursingSchool>)Cache["personalInfo"]) 
{ 
    // do something with tn.Tombstone and tn.NursingSchool 
} 

Анонимные типы удобны в пределах одного метода, но они не подходят для каждый ситуации. Не бойтесь сделать именованный тип, если он вам нужен.

3

Это именно то, что var ключевое слово для.

Таким образом, вместо:

List<> personalInfoResult = personalInfoQuery.ToList(); 

использовать это:

var personalInfoResult = personalInfoQuery.ToList(); 

Компилятор будет выяснить точный тип сам по себе вам не нужно указывать ничего. Это ни в коем случае небезопасно, он все еще набирается на 100%, даже если вы не определили тип.

+0

но что я должен положить в скобки Список <> personalInfoResult = personalInfoQuery.ToList(); – pita

+1

@pita, вы не можете поместить что-то в скобки, поэтому используется ключевое слово var –

+0

@Adrian Iftode, что, если я сохраню этот анонимный список типов в кеш, а затем получаю его, который будет объектом, как читать данные из него? – pita

Смежные вопросы