C#代码高级写法—Linq表达式Select方法多使用场景「建议收藏」

C#代码高级写法—Linq表达式Select方法多使用场景「建议收藏」今天写Linq表达式中Select以及SelectMany的用法,select是将一个源list投影到一个属性值或者多个属性值,也可以是另外一个

大家好,欢迎来到IT知识分享网。

今天写Linq表达式中Select以及SelectMany的用法,select是将一个源list投影到一个属性值或者多个属性值,也可以是另外一个属性类,通常和where子句连用,通过where子句对list进行筛选之后投影成我们需要的属性。有时我们只需要list中的单个属性,例如是需要查询井的信息,那么我们只需要知道井ID的list集合。那么我们就可以使用select语句投影成到这个井ID属性。

  • select单属性投影

石油软件类的项目通常左边为项目树,通过左边treeList的节点点击,向后台发送TreeNode属性集合,石油类部门的组织机构通常分为井区、井组、单井,当我们点击了井组集合,井区之下包含了很多口单井,井组之下包含该井组的单井,通常为5~10口单井。假设用户点击了井组节点之后,我们要获得他下面的单井节点。我们首先需要判断用户点击的是哪一级的节点,做法一般是给点击的节点赋值一个Level,通过spilt()方法判断点击是井区、井组还是单井级别。当然我们这里限定了用户点击的是井组节点,那么我们就要获取它下面所属的单井节点。需要注意的是,项目树节点传过来的类型为List<object>。

需求:筛选出组织机构下的单井,拿到井ID属性

做法:先使用where子句筛选是否为组织机构的单井,通过select方法投影出井的ID

var allOilWellsId = wellNode
										.Where(x => x is WellOrganDescriptor)
										.OfType<WellOrganDescriptor>()
										.Select(x => x.WellID).ToList();

IT知识分享网

WellOrganDescriptor类封装了组织机构单井信息类,利用ofType方法限定了方法属性名,通过select方法投影出单井的ID属性,使用var匿名定义方法返回值。

C#代码高级写法—Linq表达式Select方法多使用场景「建议收藏」

单属性投影

  • select多属性投影

多属性投影相比单属性投影多了定义一个new的步骤,分为两种情况,一种是new出当前list的单个属性集合,投影多个属性;第二种是new出指定的对象,将投影出来的属性赋值给指定的对象属性。下面介绍下面两种实现方式:

1、new出当前list的单个属性集合,进行多属性投影

直接上代码:

IT知识分享网//筛选出选中的井区中的油井id
var allOilWellsId = wellNode
										.Where(x => x is WellOrganDescriptor)
										.OfType<WellOrganDescriptor>()
										.Select(item => new { item.WellID, item.WellType })
										.Where(x => x.WellType == "11")
										.Select(x => x.WellID).ToList();

C#代码高级写法—Linq表达式Select方法多使用场景「建议收藏」

多属性投影

看出区别没,对于select投影,定义一个item属性,然后进行new出这个list的属性集合,然后投影出自己需要的属性集合。但是细心的你可能会发现,后面还加了一层where筛选,这个是在石油生产环节井分为采油井、注水井,由于需求需要选出采油井的id,所以加了这层属性的筛选,最终拿出这些油井的id。

2、new出新的对象类,将投影出来的属性进行赋值获取

List<WellIndexDescriptor> WellIndexList = this.wellNodeList
  																				.Where(x => x is WellOrganDescriptor)
  																				.OfType<WellOrganDescriptor>()
  																				.Select(item => new WellIndexDescriptor
                                           {    wellId = item.WellID,   
                                                wellName = item.WellName,   
                                                wellType = item.WellType
                                           }).ToList();

C#代码高级写法—Linq表达式Select方法多使用场景「建议收藏」

多属性投影

其中wellNodeList接收到当前选中的节点集合,WellIndexDecritor定义了井ID、井名、井型,将投影出来的井ID、井名称、井型赋值给新的对象类的属性,这样就得到了相同的组织机构单井基本信息,可以给前台进行传递,并且可以进行以后的操作。

好了,今天的分享就写到这里,码字不易,技术不易,点进来的朋友麻烦给个赞或者关注转发,您的鼓励就是我不断分享的动力。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6785.html

(0)
上一篇 2022-12-20 15:30
下一篇 2022-12-20 15:50

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信