zoukankan      html  css  js  c++  java
  • 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获取单条记录进行业务处理.这样做的好处是效率提高了.

     

  • 相关阅读:
    数据仓库010
    R语言- 实验报告
    数据仓库006
    数据仓库009
    多台Linux 7.x服务器具有相同的UUID网络链接参数,肿么办?
    数据仓库005
    数据仓库004
    我的编程竞赛生涯
    我的建模竞赛生涯
    再见了,亲爱的博客园
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6610151.html
Copyright © 2011-2022 走看看