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

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

编码文章call10242024-12-25 10:36:0020A+A-

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

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

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

List<object> list = new List<object>();
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();



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

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

var wellGeoList = DataCenter.Instance.WellGeoUnits;

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

public List<TreeListNodeDescriptor> WellGeoUnits
{ 
  get { return wellGeoUnits; }
}

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

var allWells = DataCenter.Instance.AllWells
.Where(x => wellGeoList.Any(y => y.NodeName == x.WellName)).ToList();



AllWells封装属性为:

/// <summary>/// 所有井/// </summary>public List<WellInfoDescriptor> AllWells {     get { return _allWells; } }



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

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

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4