1. 程式人生 > >匿名類型與Select方法實現自定義對象插入局部表結構中

匿名類型與Select方法實現自定義對象插入局部表結構中

aso 直接 菜單 ember new order ber 構建 als

在提取局部表結構數據時,通過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方法實現自定義對象插入局部表結構中