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

  • 匹配筛选(where)子句
  1. 属性筛选

界面上有一个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表达式,会让代码的效率事半功倍,代码可读性增加。明天分享投影以及排序、去重方法。请大家敬请关注。如果觉得这篇文章对您有帮助,请帮我点个赞或者评论下,您的鼓励是我更新下去的动力。关注我了解更多代码的写法。