2012-03-13 108 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()) 

從緩存中取出並讀取它像硫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

但我應該把什麼放在括號List <> personalInfoResult = personalInfoQuery.ToList(); – pita 2012-03-13 18:01:29

+1

@皮塔,你不能把東西放在括號中,這就是爲什麼使用var關鍵字 – 2012-03-13 18:04:56

+0

@Adrian Iftode,如果我將這個匿名類型列表保存到緩存中,然後獲取它將成爲一個對象,怎麼辦?從它讀取數據? – pita 2012-03-13 18:10:46