如何在ListView的ItemCreated事件中存取由LINQ查詢所查詢的匿名型別

如何在ListView的ItemCreated事件中存取由LINQ查詢所查詢的匿名型別

C# 3.0以後新增了var隱含型別區域變數,雖然不需事先定義變數的型別,但實際上編譯器還是會自行判斷型別,實務上常用var來接收LINQ查詢的結果,例如下列的程式碼:

   1:  Listview1.DataSource = from p in context.Regions
   2:                         select new { p.RegionID, Reg = p };
   3:  Listview1.DataBind();

 

 

若要在ListView的ItemCreated事件中取得Regions的實體(Reg),由於var區域變數是會由編譯器自行判斷型別,因此只要把別名Reg在DataItem中轉成正確的Region型別即可存取其中的屬性,程式碼如下:

   1:  protected void Listview1_ItemCreated(object sender, ListViewItemEventArgs e)
   2:  {
   3:      if (e.Item.ItemType == ListViewItemType.DataItem)
   4:      {
   5:          Region reg = DataBinder.Eval(e.Item.DataItem, "Reg") as Region;
   6:          Response.Write(string.Format("RegionID={0},RegionDescription={1}<hr/>", reg.RegionID, reg.RegionDescription));
   7:      }
   8:  }

 

 

 

 PS:感謝BillChuang前輩的提醒,及時將本文錯誤引用的部分更正過來。

【參考資料】

var (C# 參考)