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

  

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

  1. Linq学习(主要参考linq之路)----2LINQ方法语法

    方法语法:Fluent Syntax 方法语法是非常灵活和重要的.我们这里讲描述使用连接查询运算符的方式来创建复杂的子查询,方法语法的本质是通过扩展方法和Lambda表达式来创建查询. eg1: st ...

  2. CDN学习笔记二(技术详解)

    一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...

  3. 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 f ...

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

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

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

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

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

    本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...

  7. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  8. IPv6技术详解:基本概念、应用现状、技术实践(下篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...

  9. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...

  10. Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务

    一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2  应用服务和数据服务拆分  特点:App.DB.Fi ...

随机推荐

  1. [转]SVN客户端解决authorization failed问题

    转载地址:http://blog.csdn.net/patdz/article/details/7669591 1. 创建文件夹 E:\STWSource\STWLibrarySVN 2.在文件夹ST ...

  2. Spring中的事物管理,基于spring的bean的配置

    很多东西与上边的相同,这儿只简介: 导包... 数据库中建立三个表... 建立存放连接数据库的file文件:jdbc.properties: ----------------------------- ...

  3. Linux系统软件

    ubuntu系统镜像文件: http://pan.baidu.com/s/1jGGgszO 虚拟机: http://pan.baidu.com/s/1hqrhQQg

  4. Auty自动化测试框架第七篇——添加动作库和常量文件库

    [本文出自天外归云的博客园] 添加动作库 因为有很多调用的action类如果一直保存在utils中会让utils库不可维护,所以规定utils库中只放和框架本身有关的工具类,和脚本内容相关的工具类都放 ...

  5. [poj2528] Mayor's posters (线段树+离散化)

    线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...

  6. 【转载】C++中的位拷贝和值拷贝

    ---恢复内容开始--- 原文:C++中的位拷贝和值拷贝 原文:http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以Strin ...

  7. UITableView优化的方法

    使用不透明视图. 不透明的视图可以极大地提高渲染的速度.因此如非必要,可以将table cell及其子视图的opaque属性设为YES(默认值). 其中的特例包括背景色,它的alpha值应该为1(例如 ...

  8. web过滤器中获取请求的参数(content-type:multipart/form-data)

    1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; ...

  9. 转!!URL 传+号到后台变空格问题解决方案

    网上很多解决方法,但是前提是get请求(或者是post请求后面追加的参数),让我试了很久(我是post),没成功!引以为戒!! 今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是 ...

  10. 【matlab】膨胀

    clear all;close all; BW=zeros(9,10); BW(4:6,4:7) =1 imshow(BW) hold on SE=strel('square',3) BW2=imdi ...