当前位置: 首页 > news >正文

C#编程(六十)----------LINQ的概述

LINQ的概述

LINQ的全名为语言继承查询,VS2008.NET3.5版中一款突破性的创新,他再对象领域和数据领域之间架起了一座桥梁.使用LINQ能大大加快对于对象数据等等的查询,加快效率.

 

由于低版本的VS不支持LINQ,我是用的VS2012,案例如下:

    public class ObjDataItem

    {

        public string Name { get; set; }

        public int Value { get; set; }

        public DateTime CreateDate { get; set; }

    }

然后用一个List<ObjDataItem>objects来存放实例化的ObjDataItem数据.要对这个List<T>进行查找有三种常用的方法来查找, 以下对三种方法进行介绍:

(1)遍历List<T>中的每个ObjDataItem对象,对比是否符合查找条件.

(2)使用List<T>FindAll方法来潮找符合条件的对象集

(3)使用LINQ来查找符合条件的对象集.

 

先假设查找条件是ObjDataItem对象的name属性的值是”a”,三种方法查找的代码列出来看看.

 

(1)遍历查找方法:

            List<ObjDataItem> items = new List<ObjDataItem>();

            List<ObjDataItem> ObjData = new List<ObjDataItem>();

            foreach (ObjDataItem item in items)

            {

                if (item.Name.ToLower() == "a")

                    ObjData.Add(item);               

            }

(2)List<T>FindAll方法查找

List<T>FindAll的定义是:

public List<T> FindAll(Predicate<T> match)

其中Predicate是一个委托,表示定义一组条件并确定指定对象是否符合这些条件的方法.

public delegate bool Predicate<T> (T obj)

所以使用List<<T>FindAll来查找对象就需要编写实例Predicate<T>的方法.

        private string _SearchName;         private bool FindByName(ObjDataItem obj)         {             if (obj.Name.ToLower() == _SearchName.ToLower())                 return true;             else                 return false;         }

然后就可以使用List<T>FindAll方法来查找符合条件的对象。

public List<ObjDataItem> SearchAllByName(string name)         {             _SearchName = name;             List<ObjDataItem> items = Objects.FindAll(FindByName);             return items;         }

(3)使用LINQ查找对象

使用LINQ来查找符合条件的对象方便了很多,代码如下:

IEnumerable<ObjDataItem> items =         from objdataitem in ObjData.Instance.Objects         where objdataitem.Name.ToLower() == "a"         select objdataitem;

 

从上面代码来看遍历查找是最好理解的,使用FindAll复杂了不少,而使用LINQ则有点奇怪,看上去有点象SQL语句,这三种方法均能得到正确的结果,但是执行速度却相差很大。通过示例程序计算的时间方法(1)是方法(2)的时间的9倍左右,方法(2)是方法(3)的21倍左右。从面可见使用LINQ是既方便又快速!

 

 

如果没有LINQ,筛选出姓名为小明的People对象则需要一个List,然后遍历整个列表,降负荷丁丁雕件的People对象放入列表.到那时有了LINQ,这部分筛选就变得很容易,甚至只要一句话就能完成.如果觉得这个例子不够说明LINQ对生产力有重大贡献的话,那么我们的鸡的皮就会下降百分之五十.

LINQ特指形如from...where..select这样的代码,其返回值是IQueryable<T>IEnumerable<T>.

 

LINQ to SQL.NET3.5内置的一个轻量级O/R Mapping解决方案,可以将数据表映射为实体对象,方便开发人员对数据库的操作.可见, LINQ事实上只是LINQ的一个实现,提供了一个可以查询SQL Server数据库的LINQ Provider.

 

LINQ ProviderLINQ查询的执行器,标准LINQ语法支持很多的操作符,但是某个具体的LINQ实现可能只支持其中的一部分..NET3.5默认提供了三种LINQ Provider,分别是LINQ to Object , LINQ to SQL , LINQ to XML.

 

LINQ to XXX表示使用LINQ针对XXX这种数据进行查询的解决方案.我们可以定义自己的LINQ Provider,使用我们自定义的查询规则来处理特定数据集.目前网上可以找大哦数十种LINQ Provider,而已经处于beta 3阶段的ADO.NET Framework,最终也会提供了LINQ Provider,叫做 LINQ to Entities.

 

总结:

LINQ提高效率,方便在特定集合中寻找单条记录,避免使用foreach循环,频繁的数据库查询,可以根据实际的开发案例适当的使用.

 

开发中需要循环处理一个集合中的每条记录时,我们可以把相应的数据统一放到内存的一个List集合中,然后使用LINQ获取单条记录进行业务处理.这样做的好处是效率提高了.

转载于:https://www.cnblogs.com/FinleyJiang/p/7602745.html

相关文章:

  • 使用 Zipkin 和 Brave 实现分布式系统追踪
  • 让XCode自动CodeReview你的代码-OCLint使用
  • 对话翁志:京东大数据如何让技术真正落地
  • Logstash+FileBeat+MongoDB+Flask打造的日志系统(三)
  • 【SignalR学习系列】5. SignalR WPF程序
  • 使用UAC白名单让指定的程序不受UAC限制
  • 无痕浏览的坑
  • 自动化执行 - 钉钉机器人通知
  • 想了解概率图模型?你要先理解图论的基本定义与形式
  • 从源码分析JSONObject因版本差异导致toString格式异常问题
  • 封装html代码块到js函数中
  • K8S集群tls证书管理
  • Android -- DragDrop
  • 一个完整Java Web项目背后的密码
  • PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)...
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【前端学习】-粗谈选择器
  • Android开源项目规范总结
  • Angular数据绑定机制
  • es的写入过程
  • EventListener原理
  • gops —— Go 程序诊断分析工具
  • httpie使用详解
  • Java 内存分配及垃圾回收机制初探
  • java小心机(3)| 浅析finalize()
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring Cloud中负载均衡器概览
  • 面试总结JavaScript篇
  • 你不可错过的前端面试题(一)
  • 扑朔迷离的属性和特性【彻底弄清】
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何解决微信端直接跳WAP端
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 小程序01:wepy框架整合iview webapp UI
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.ajax中的eval及dataType
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C)一些题4
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (二十三)Flask之高频面试点
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (学习日记)2024.01.09
  • .net core 依赖注入的基本用发
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET框架
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ C++ ] STL_vector -- 迭代器失效问题