匿名类型与Select方法实现自定义对象插入局部表结构中

本文介绍了C#中匿名类型的使用方法及其在LINQ查询表达式中的应用,包括如何创建匿名类型对象并将其作为数据源绑定到控件上,以及如何比较两个匿名对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在提取局部表结构数据时,通过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不成立。

转载于:https://www.cnblogs.com/mol1995/p/7499206.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值