Linq学习总结1--参考Linq技术详解

2个要点:

1.linq操作的集合必须实现IEnumerable接口,所以在这3.0之前为实现该接口的集合需通过Cast或TypeOf方法转换成可Linq的集合;

2.查询式和Lame那啥表达式都可以一起使用.那个方便用哪个,他们只在第一次使用时才会真正去查询;

   List<Employee> ils = new List<Employee>()
            {
                new Employee(){IDCode="jack5",Age=20,littleName="ab"},
                new Employee(){IDCode="mike444",Age=12,littleName="aa"},
                new Employee(){IDCode="mary5",Age=12,littleName="zs"},
                new Employee(){IDCode="sm5555",Age=67,littleName="yb"},
                new Employee(){IDCode="som",Age=67,littleName="cr"}
            };

            ArrayList als = new ArrayList()
            {
                new Department(){Name="jack",DepName="富士康"},
                new Department(){Name="jack",DepName="華為"},
                new Department(){Name="mary",DepName="騰訊"},
                new Department(){Name="sum",DepName="移動"},
                new Department(){Name="soom",DepName="聯通"}
            };

            #region 查詢語句  第三章,linq技術詳解
            //帶有Into的group by語句
            var va = from c in ils
                     group c by new { c.littleName, c.Age } into g
                     select new { Name = g.Key, ageC = g.Count() };
            var va1 = ils.GroupBy(p => new { p.littleName, p.Age }).Select(p => new { name = p.Key, agec = p.Count() });

            //顯示枚舉變量類型
            var varT = from c in ils
                       join Department d in als on c.IDCode equals d.Name
                       select new { age = c.Age, depName = d.DepName };
            var varT1 = ils.Join(als.Cast<Department>(), c => c.IDCode, p => p.Name, (c, p) => new { age = c.Age, depName = p.DepName });

            //join語句
            var varJoin = from c in ils
                          join Department d in als
                          on c.IDCode equals d.Name
                          into ao
                          select new { c.IDCode, sum = ao.Sum(p => p.DepName.Length) };
            var varJoin1 = ils.GroupJoin(als.Cast<Department>(), a => a.IDCode, b => b.Name, (b, a) => new { b.IDCode, sum = a.Count() });

            //Let和Where語句
            var varLet = from c in ils
                         let names = c.IDCode + ":" + c.littleName
                         where names.Length > 5
                         select new { c.Age, names };
            var varLet1 = ils.Select(a => new { a, names = a.IDCode + ":" + a.littleName })
                .Where(p => p.names.Length > 5)
                .Select(b => new { b.a.Age, b.names });

            //Generator語句(多個 from),orderby語句
            var varSelMany = from a in ils
                             from b in als.Cast<Department>()
                             orderby a.Age, a.Department descending
                             select new { a.IDCode, a.littleName, a.Age, b.DepName };
            var varSelMany1 = ils.SelectMany(p => als.Cast<Department>().Select(a => new { p.Age, a.DepName })).OrderByDescending(a => a.Age).ThenByDescending(a => a.DepName);

            //group by
            var varGroup = from p in ils
                           group p by p.Age
                               into a
                               select a.Key + ":" + als.Capacity;

            #endregion

            #region 延遲操作符詳解
            //異常都是ArgumentNullException
            //select,where都有兩個原型,另一個原型有索引參數
            var varWhere = ils.Where((p, i) => i < 2);

            //分區操作符 take
            var varTake = ils.Take(2);

            //TakeWhile 只要條件不符合就會跳出
            var varTakeWhile = ils.TakeWhile((p, q) => p.IDCode.Length > 4);

            //skip 與take互補
            var varSkip = ils.Skip(2);

            //skipwhile 與takewhile互補
            var varSkipWhile = ils.SkipWhile((a, i) => a.IDCode.Length > 5 && i < 3);

            //串聯操作符
            var varConcat = ils.Take(2).Concat(ils.Skip(2));
            //concat只可以串聯兩個序列,當串聯多個序列的時候可以用SelectMany;
            var varSelectMany1 = new[] { ils.Take(1), ils.Skip(1) }.SelectMany(s => s);

            //排序操作,第二個原型可以加參數,比較器,二次排序用thenby,orderbydesding類似
            var varOrderby = ils.OrderBy(p => p.IDCode.Length);

            //reverse相反序列輸出
            //Join和JoinGroup p119
            IEnumerable<IGrouping<string,Employee>> items =  ils.GroupBy(p => p.littleName);
            IEnumerable<IGrouping<string,Department>> items1=  ils.GroupBy(p => p.IDCode, q => q.Department);

            //集合操作符 distinct,union(并集區別于Concat),intersect(連接后重複元素的序列),except(刪除參數中與自己重複的元素)
            var ca = ils.Distinct();
            List<Employee> ils1 = ils.Take(2).ToList<Employee>();
            ils1.Add(new Employee() { IDCode = "我加的", Age = 33, littleName = "xixi" });
            foreach (var v in ils.Except(ils1))
            {
                Console.WriteLine(v.littleName);
            }

            //元素操作符
            var ilsDefaultIfEmpty = ils.Where(p => p.IDCode == "hehe").DefaultIfEmpty().First();
            var ilsDefaultIfEmpty1 = ils.Where(p => p.IDCode == "hehe").DefaultIfEmpty(new Employee() { IDCode="heheid"}).First();

            //生成操作符 Enumerable靜態方法Range,Repeat,
            IEnumerable<int> EnumRange =  Enumerable.Range(2, 20);
            foreach (int i in EnumRange)
            {
                Console.WriteLine(i);
            }
            //p145

            string str = string.Empty;
            //cast,ofType,AsEnumerable()[將序列編程序列,適用于Linq To Sql]

            #endregion

  

时间: 2024-10-11 16:38:06

Linq学习总结1--参考Linq技术详解的相关文章

J2EE学习篇之--JQuery技术详解

前面我们讲解了的J2EE的技术都是服务端的技术,下面我们来看一下前端的一些开发技术,这一篇我们来看一下jQuery技术 简介: jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE,写更少的代码,做更多的事情. 它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏

Linq实战 之 Linq to Sql及Entity Framework操作详解

Linq实战 之 Linq to Sql及Entity Framework操作详解 一:linq to db的框架 1. linq to sql 2. linq to ado.net entity framework linq to sql是一个团队 ef 是一个团队... linq to sql => ef 团队. linq to sql 适合一些小型的项目 => sqlserver ef 适合中形的项目,而且可以支持 sqllite,mysql,sqlserver 掌柜的项目开发中:使用的

J2EE学习篇之--Struts2技术详解

前面说到了Struts1的相关知识,下面来说一下Struts2的相关知识,我们知道现在Struts2使用的比Struts1多,Struts2已经替代Struts1成为主流的框架了... 摘要 Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架.不过有一点大家需要注意的是:尽管Struts2和Struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要推出struts

FluentData 轻量级.NET ORM持久化技术详解

FluentData 轻量级.NET ORM持久化技术详解(C#4.5/Linq/Lambda,事务/储存过程,开源框架) 课程讲师:风舞烟 课程分类:.NET框架 适合人群:初级 课时数量:19课时 用到技术:FluentData 涉及项目:FluentData轻量级 咨询qq:1840215592 本课程系<基于ASP.NET MVC 4 +Knockout.JS+Web API+FluentData+EasyUI 技术实现Web通用商业开发框架>中的一个单品课程,北风产品总监"

实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎.柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统. 前言: 在上篇<如何选择纠删码编码引擎>中,我们简单了解了 Reed-Solomon Codes(RS 码)的编/解码过程,以及编码引擎的评判标准.但并没有就具体实现进行展开,本篇作为<纠删码技术详解>的下篇,我们将主要探讨工程实现的问题. 这里先简单提炼一下实现高性能纠删码引擎的要点:首先,根据编码理论将矩阵以及有限域的运算工程化,接下来主

红帽Linux故障定位技术详解与实例(2)

红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 3.内核故障情形及处理 (1)内核panic panic是内

Comet技术详解:基于HTTP长连接的Web端实时通信技术

前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 关于这4种技术方式的优缺点,请参考<Web端即时通讯技术盘点:短轮询.Comet.Websocket.SSE>.本文将专门讲解Comet技术.(本文同步发布于:http://www.52im.net/thread-334-1-1.html) 学习交流 - 即时通

SSE技术详解:一种全新的HTML5服务器推送事件技术

前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events).关于这4种技术方式的优缺点,请参考<Web端即时通讯技术盘点:短轮询.Comet.Websocket.SSE>.本文将专门讲解SSE技术. 服务器推送事件(Server-sent Events),简称SSE,是 HTML 5 规范中的一个组成部分,可以用来从服务端

腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

本文来自腾讯前端开发工程师" wendygogogo"的技术分享,作者自评:"在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦." 1.GIF格式的历史 GIF ( Graphics Interchange Format )原义是"图像互换格式",是 CompuServe 公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了. GIF 格式可以存储多幅彩色图像,如果将这些图像((https://www.q

CDN技术详解及实现原理

CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同好. 第一章    引言    “第一公里”是指万维网流量向用户传送的第一个出口,是网站服务器接入互联网的链路所能提供的带宽.这个带宽决定了一个 网站能为用户提供的访问速度和并发访问量.如果业务繁忙,用户的访问数越多,拥塞越严重,网站会在最需要向用户提供服务时失去用户.(还有“中间一公里” 和