首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码干货——C#Linq表达式的高级写法

Linq全称为“Language Integrated Query”,译为“语言集成查询”。主要在前台对数据源的封装与处理。接下来就项目的实际需求场景,介绍下面的Linq用法:

匹配筛选(where)子句

属性筛选

界面上有一个checkListComboxEdit控件,其数据项都存在Items数组中,选中项存在SelectdedItems如果我们要选择其中的选中项,写代码的思路必然是foreach这个数组,然后重新new一个新的List,然后将其中的item重新添加到这个新的List,下面给出代码示例:

List list = new List();foreach (var item in this.checkedListBoxControl_ProdIndex.SelectedItems)

{

list.Add(item);

}

使用where筛选将会变得更加简单,不信你看:

var selectItems = this.checkedListBoxControl_ProdIndex.Items

.Where(x => x.CheckState == CheckState.Checked).ToList();

checkList属性获取

2.多list列表属性匹配筛选

假设项目中得到了一个类型为TreeListNodeDescriptor的list列表,如果要根据其共有属性匹配成另外一个list列表,作用是获取井信息,类型为WellInfoDecriptor,其中一个方案就是遍历原有的TreeListNodeDescriptor的list,然后匹配里面的WellName属性,然后将WellInfo获取出来,仔细想想代码其实会写的很冗长。而通过Where子句就会变得很简单,其中用到Any()检查是否满足该条件,相当于遍历中的if语句。直接上代码:

var wellGeoList = DataCenter.Instance.WellGeoUnits;

其中WellGeoUnits为TreeListNodeDescriptor类型的列表,DataCenter为数据中心,主要是调用后端数据接口,将井节点传递到前台。WellGeoUnit属性进行了封装,设置为只读属性:

public List WellGeoUnits

{

get { return wellGeoUnits; }

}

接着,需要通过井Id获取到井信息,由于提前获取到了所有的井信息,保存在List中,命名为AllWells,于是:

var allWells = DataCenter.Instance.AllWells

.Where(x => wellGeoList.Any(y => y.NodeName == x.WellName)).ToList();

多表连接

AllWells封装属性为:

/// /// 所有井/// public List AllWells { ? ? get { return _allWells; } }

属性封装

通过Any()方法,将两个列表的共有属性WellName进行判断,获取出所有井中包含该井名的井信息,这样做的前提保障是井名不会重复,自己做的时候需要有一个主键属性,通过这样的方式,将所有井的信息获取出来,保存在allWells的list列表中。

今天就先分享Linq表达式的where子句的用法,其中还介绍了多表连接中,使用Any()属性判断属性是否相同,合理使用Linq表达式,会让代码的效率事半功倍,代码可读性增加。明天分享投影以及排序、去重方法。请大家敬请关注。如果觉得这篇文章对您有帮助,请帮我点个赞或者评论下,您的鼓励是我更新下去的动力。关注我了解更多代码的写法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210208A05FKC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com