匿名類型與Select方法實現自定義對象插入局部表結構中
在提取局部表結構數據時,通過Select選取需要的字段,如下句,此時其實產生了一個不用於_menuMan的原新數據類型new { c.SYS_COMMANDS_ID,c.TXT_COMMANDTITLE },這樣的類型就叫匿名類型
var comdList = _menuMan.Load(c => c.FATHER_ID == null).OrderBy(c=>c.VAL_DISPLAYORDERID).Select(c=>new { c.SYS_COMMANDS_ID,c.TXT_COMMANDTITLE }).ToList();
//註意下面這種對象聲明方法叫匿名類型,不事先定義類或結構,而直接創建其對象。
//它與上面的Select對應,因為Select方法相當於創建了一種不同於初始表結構的新類型,要往其中添加成員,只能用這種匿名類型的方法。
//上面的Select也可寫成Select(c=>new { id=c.SYS_COMMANDS_ID, name=c.TXT_COMMANDTITLE }),下面的匿名類型定義時也要把名稱SYS_COMMANDS_ID改成id等
//創建該匿名類型的另一個自定義對象,並插入到0位置
var sys = new { SYS_COMMANDS_ID = 0, TXT_COMMANDTITLE = "頂層菜單" };
comdList.Insert(0, sys);
//控件數據源綁定這樣的匿名類型做數據源
combRootMenu.DisplayMember = "TXT_COMMANDTITLE";
combRootMenu.ValueMember = "SYS_COMMANDS_ID";
combRootMenu.DataSource = comdList;
擴展:比較兩個匿名對象時,應該用Equal和不能用==運算符,因為前者是比較值,後者是比較地址。如:
// 構建兩個匿名類型,擁有相同的名稱/值對
var worker1 = new { FirstName = "Harry", SecondName = "Folwer", Level = 2 };
var worker2 = new { FirstName = "Harry", SecondName = "Folwer", Level = 2 };
這時,
worker1.Equals(worker2)是成立的,而
worker1==worker2不成立。
匿名類型與Select方法實現自定義對象插入局部表結構中