LINQ入门(上篇)
admin
2023-02-15 03:40:10
0

来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=163
GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com

到现在为止你还未触碰LINQ,那进来吧 —— LINQ入门(上篇)
前 言
  最近和我们老大一起做技术面试(我是旁听的),发现前来面试的没几个掌握甚至是丁点了解LINQ。这让我很纳闷,LINQ伴随2008一起发布至今难道大家真的没时间去了解一下或者学习一下这个应用基础吗。甚至问及有些人LINQ是什么,答题者想都不想 LINQ TO SQL, 崩溃!没错,LINQ是可以TO SQL,但是除了SQL,LINQ就无所作为了?非也。因此在这里和大家一起分享学习LINQ。本文适合以下读者, 如果你是不符合者请赏脸捧个场,3Q
•   从未触碰过LINQ的
•   对LINQ有过了解但是从未实战过的
•   打算学习LINQ的
简 介
  LINQ 是什么?引用官方术语“语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。” 那么LINQ给我们带来了什么,请看以下例子:
  问:有序列A=int[]{1,2,3,4,5,6,7,8,0}; B=int[]{2,4,7,8,9}。请求出包含A和B共同值的序列C。
  如果按照原来的思路,那么编码也许如下:

List c = new List();

foreach(int a in A){
    foreach(int b in b) {
       if (a==b) {
           c.add(a);
       }
    }
}

是不是觉得上面这段虽然没什么问题,但是很丑陋。如果我们引用LINQ来编写呢:

IEnumerable C = from a in A
                     from b in B
                     where a==b
                     select a;

是不是觉得很爽,一句话简单的把上面丑陋的代码给KO掉了。也许你看不懂上面的语法,没关系请继续往下阅读。
语 法
  1. LINQ所处在的主要命名空间:System.Linq
  2. LINQ的处理的核心对象就是IEnumerable可枚举对象也包括了泛型枚举,换句话说当你要处理的对象为IEnumerable类型对象时即可使用LINQ操作它。且在没有经过其他处理的情况下将返回一个新的IEnumerable序列,注意LINQ有一个特性“延迟加载”这个将在后续说明。

  1. 关键字(摘自MSDN):  
        from : 指定数据源和范围变量(类似于迭代变量)。
        where: 根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。
        select: 指定当执行查询时返回的序列中的元素将具有的类型和形式。
        group: 按照指定的键值对查询结果进行分组。
        into: 提供一个标识符,它可以充当对 join、group 或 select 子句的结果的引用。
        orderby: 基于元素类型的默认比较器按升序或降序对查询结果进行排序。
        join: 基于两个指定匹配条件之间的相等比较来联接两个数据源。
        let: 引入一个用于存储查询表达式中的子表达式结果的范围变量。
        in: join 子句中的上下文关键字。
        on: join 子句中的上下文关键字。
        equals: join 子句中的上下文关键字。
        by: group 子句中的上下文关键字。
        ascending:orderby 子句中的上下文关键字。
        descending:orderby 子句中的上下文关键字。
      4. 语法说明,每个LINQ语句都以from作为开头,以select作为结束,这点和T-SQL语法不通的切记先入为主的思考。其他关键字如where则类似T-SQL作为筛选判断条件。
    样例:IEnumerable nums = from n in nums where .... orderby... select....
    扩 展
      从 .net 3.0 开始 MS 就给我们引进了其他一些新的特性,由于篇幅关系在这里给大家简单的介绍几个LINQ常用到的特性:
      1. 关键字 var :
        指示编译器根据初始化语句右侧的表达式推断变量的类型。 推断类型可以是内置类型、匿名类型、用户定义类型或 .NET Framework 类库中定义的类型。这样我们就可以在上述的LINQ表达式中 例如可简写为: var nums = from n in nums where .... orderby... select....
      2. 匿名类型:  
        匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。例如:var obj = new {A="a", B="b"}; 而LINQ则可以为 var nums = from obj in objs select new {obj.A, obj.B}
    案 例
      普通查询
    var query = from num in num
    select num.ProperyA
      筛选查询
    var query = from obj in objs
    where obj.ProperyA > Condition
    select obj
      分组查询
    var query = from obj in objs
    group obj by obj.PropertyA into g
    orderby g.Key
    select g;
    注意,在此示例里,关键字 into 不是必须的,使用 into 时,必须继续编写该查询,并最终用一个 select 语句或另一个 group 子句结束该查询。
      内联查询
    var query= from obj1 in objs1
    join obj2 in objs2 on obj1.ID equals obj2.ID
    select new { A= obj1.Property, B = obj2.Property };
       左外联查询
    var query = from obj1 in objs1
    join obj2 in objs2 on obj1.ID equals obj2.Obj1ID into g
    from subpet in g.DefaultIfEmpty()
    select new { P1 = obj1.P1, P2 = (subpet == null ? null : subpet.P2 ) };
      注意,此处涉及到.net 3.5 新特性静态扩展方法(后续介绍不影响理解)DefaultIfEmpty():如果序列为空,则返回一个具有默认值的单一实例集合
    总 结
      本文到此,对LINQ的入门进行了简单介绍。你可以进行简单的实战应用了。后续将和大家一起分享学习 什么是静态扩展方法,它与LINQ有什么关系。LINQ的涉及应用如:linq to sql, lint to entites, linq to xml, linq to dataset 等等。敬请期待。
      最后感谢阅读,有说得不对的地方请多多指正。
    资 源
      linqpad:一个学习LINQ的好工具http://www.linqpad.net/
      linq开发资源:http://www.codeproject.com/KB/linq/

    来自森大科技官方博客
    http://www.cnsendblog.com/index.php/?p=163
    GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
    http://cnsendnet.taobao.com

相关内容

热门资讯

“从造王者沦为票房毒药,5月多... 【文/观察者网 熊超然】美国总统特朗普在共和党内长期扮演“造王者”的角色,但随着年底的中期选举日益临...
风声丨为完成指标,引诱少年吸毒... 作者丨陈碧中国政法大学教授近日,媒体报道了一起“诱人犯罪”案。南京一派出所副所长马某犯欺骗他人吸毒罪...
女游客体验景区悬崖秋千项目高空... 极目新闻记者 谢茂5月5日,多位网友发视频称,一处景区悬崖秋千项目发生事故,致一名女游客受伤。网友发...
凤凰女记者战地日记丨广场之内和... 【编者按】这是凤凰卫视驻伊朗记者李睿的战地日记。她身处德黑兰,既是战争的亲历者,也是观察者。在她的日...
伊朗两枚导弹击中美国军舰 伊朗法尔斯通讯社5月4日报道,两枚导弹击中了一艘美国海军舰艇。法尔斯通讯社称,这艘舰艇今日在贾斯克附...
罗晴秋:悦读,让张家界更硬核起... 4月21日晚,悟空研究院院长罗晴秋应邀主持2026悦读共创大会暨华人国学大典丙午春集闭门交流会。4月...
伊朗外长启程访华 据凤凰卫视报道,伊朗外交部5日宣布,伊朗外长阿拉格齐当天启程,到中国北京展开访问。伊朗外交部在其电报...
女子体验瀑布秋千坠亡,四川华蓥... 情况通报5月3日下午,华蓥市玛琉岩探险公园发生一起人员伤亡事故,游客刘某某(女)在体验瀑布秋千项目时...
凤凰直击浏阳烟花厂爆炸:3公里... 湖南长沙浏阳市华盛烟花制造燃放有限公司5月4日发生爆炸,截至目前已造成26人遇难、61人受伤。凤凰卫...
涵盖6大类花品及10种特色花 ... 4月27日,在文化和旅游部主办的2026年全国“五一”文化和旅游消费周与首届中国新文创市集媒体推介会...