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 Provider是LINQ查询的执行器,标准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获取单条记录进行业务处理.这样做的好处是效率提高了.

C#编程(六十)----------LINQ的概述的更多相关文章

  1. C#高级编程六十九天----DLR简介 .在.NET中使用DLR(转载) 我也来说说Dynamic

    DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象 ...

  2. C#高级编程六十六天----表达式树总结【转】

    https://blog.csdn.net/shanyongxu/article/details/47257139 表达式树总结 基础 表达式树提供了一个将可执行代码转换成数据的方法.如果你要在执行代 ...

  3. 学习ASP.NET Core Razor 编程系列十六——排序

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  4. 学习ASP.NET Core Razor 编程系列十九——分页

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  5. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  6. 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  9. [.net 面向对象编程基础] (20) LINQ使用

    [.net 面向对象编程基础] (20)  LINQ使用 通过上节LINQ的基础知识的学习,我们可以开始使用LINQ来进行内存数据的查询了,我们上节说了LINQ的定义为:Language Integr ...

随机推荐

  1. 一个简单的Java程序

    一个.NET技术还是很菜的水平的猿人现在要去学习Java不知道是坏是好,无从得知啊! 不过在网上看了好多Java方面的简单例子,感觉Java还是蛮不错的么!不管以后怎么样啦,先开始自己的Java菜鸟之 ...

  2. Java 组合

    组合: 在新类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以这种方法称为组合 组合和继承都允许在新的类中放置对象,组合时显示的这样做,而继承则是隐式的这样做 组合技术通常用于想在新类中使用 ...

  3. tensorflow-作用域

    变量名字由两部分组成:scope/变量name. name 参数才是对象的唯一标识. 1.tf.name_scope() Graph中保存着一个属性_name_stack(string类型),_nam ...

  4. MySQL多线程备份工具mydumper

    mydumper是一个针对MySQL和Drizzle的高性能多线程的备份和恢复工具.此工具的开发人员分别来自MySQL.Fackbook.SkySQL公司,目前已经有一些大型产品业务测试并使用了该工具 ...

  5. MySQL锁分类

    相对其他数据库而言,MySQL的锁机制比较简单,基最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB ...

  6. Windows 10安装pip方法

    pip是一款非常方便的python包管理工具,本文主要介绍在windows 10下安装pip方法. 1. 下载pip 地址:https://pypi.python.org/pypi/pip#downl ...

  7. Git(三)Git的远程仓库

    一. 添加远程库 现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份.常用的远程仓库就是github:https://g ...

  8. Qt QByteArray或者Char转十六进制 QString

    1.QByteArray转十六进制 QByteArray buff = sp->readAll(); qDebug() << buff.toHex() << " ...

  9. Codeforces 12D Ball cdq分治

    裸的cdq, 没啥好说的, 要注意mid左边和mid右边的a相同的情况. #include<bits/stdc++.h> #define LL long long #define fi f ...

  10. sublime安装package control 的方法

    1.安装sublime3后,点击菜单 view>show console,复制以下代码按回车即可,安装时稍微有些卡,需要耐心等待. import urllib.request,os; pf = ...