按关键词阅读:

文章图片

Linq全称为“Language Integrated Query” , 译为“语言集成查询” 。 主要在前台对数据源的封装与处理 。 接下来就项目的实际需求场景 , 介绍下面的Linq用法:
- 匹配筛选(where)子句
- 属性筛选
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();
checkList遍历获取
2.多list列表属性匹配筛选
假设项目中得到了一个类型为TreeListNodeDescriptor的list列表 , 如果要根据其共有属性匹配成另外一个list列表 , 作用是获取井信息 , 类型为WellInfoDecriptor , 其中一个方案就是遍历原有的TreeListNodeDescriptor的list , 然后匹配里面的WellName属性 , 然后将WellInfo获取出来 , 仔细想想代码其实会写的很冗长 。 而通过Where子句就会变得很简单 , 其中用到Any()检查是否满足该条件 , 相当于遍历中的if语句 。 直接上代码:
var wellGeoList = DataCenter.Instance.WellGeoUnits;
【var|代码干货——C#Linq表达式的高级写法】其中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表达式 , 会让代码的效率事半功倍 , 代码可读性增加 。 明天分享投影以及排序、去重方法 。 请大家敬请关注 。 如果觉得这篇文章对您有帮助 , 请帮我点个赞或者评论下 , 您的鼓励是我更新下去的动力 。 关注我了解更多代码的写法 。
来源:(努力的浩浩)
【】网址:/a/2021/0208/kd693464.html
标题:var|代码干货——C#Linq表达式的高级写法