LinQ 学习笔记

书: LINQ高级编程 (Professional LINQ) By Scott Klein


今天看了书的1~4章,觉得作者很奇怪,为什么代码有时候是C#的,有时候又是VB得?幸好我懂VB,不然的话,看到被C#所不齿的VB代码,肯定会像吃了苍蝇那般的恶心。可以肯定的是,这不是一本好书!没看到什么亮点,作者也没有很深入的讲解LINQ的底层实现,很对不起Pro这个词!所幸的是,纸张质量还是不错的,字体很大,看着很舒服。


  • LinQ可以应用于实现了IEnumerable<T>和IQueryable<T>的数据源,包括数组。那么实现IEnumerable和IQueryable的可以吗?不可以!
  • Lamda表达式,返回的是一个代理对象。
  • LinQ表达式本身不执行任何查询,而只是定义查询,在随后对表达式进行For each枚举的时候,才会真正去执行。同时作者指出,是在第一次调用MoveNext()的时候执行真正的查询,这个有待验证。不是GetEnumerator()吗?不是!
  • LinQ分成表达式和方法两种。表达式就是通过关键字(from xxx in xxx where xxx select xxx)定义查询,而方法么就是(xxx.Where(xxx).Select(xxx))直接执行查询,作者指出,LinQ表达式在编译的时候,会被编译成LinQ方法,经过验证,.Net Reflector在使用.Net 3.5会反编译成LinQ表达式,使用.Net 2.0则编译成LinQ方法,但是可以看到.Net创建了一些static的方法,对应LinQ的各个表达式(还有代理)。
  • LinQ表达式和T-SQL有点不一样,就是T-SQL把select语句放在最前面,而LinQ却把from放在最前面,这个一直让我记不起怎么写LinQ表达式!作者指出,数据库里面对T-SQL表达式的翻译其实是从From子句开始的,Select在蛮后面的。This makes sense! 那么,我就可以自欺欺人的理解LinQ这样的设计是为了性能考虑吧(或者是编译器性能?因为LinQ表达式最终会被翻译成方法嘛,哈哈)
  • Union与Concat区别是Union返回不重复的项目。

转载于:https://www.cnblogs.com/puncha/archive/2012/11/15/3876972.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 1 LINQ查询结果集 1 2 System.Array 数组 1 2.1 基于System.Array定义数组 1 2.2 基于类型定义数组 1 2.3 数组元素的清空 1 2.4 System.Array类静态成员 1 2.5 不用循环填充数组 1 2.6 数组类实例成员 2 3 System.Collections 集合 2 3.1 ArrayList 2 3.1.1 实例成员 2 3.1.2 静态成员 2 3.2 List<T> 3 3.3 Hashtable 6 3.4 SortedList 6 3.5 SortedList<TKey,TValue> 7 3.6 Queue<T> 8 3.7 Stack<T> 8 3.8 LinkedList<T> 8 3.9 HashSet<T> 9 4 System.Linq 10 4.1 System.Linq.Enumerable 10 4.2 System.Linq.Queryable 10 4.3 System.Linq.Lookup <TKey,TElement> 10 4.4 System.Linq.Expressions.Expression 10 5 接口 10 5.1 IEnumerable 、IEnumerator 10 5.1.1 正常使用 10 5.1.2 C#的 yield 12 5.2 IEnumerable <T> 12 5.3 IEnumerator <T> 12 5.4 ICollection 12 5.5 ICollection <T> 13 5.6 IList 13 5.7 IList <T> 13 5.8 IEqualityComparer 13 5.9 IEqualityComparer <T> 13 5.10 IDictionary 13 5.11 IDictionary <TKey,TValue> 13 5.12 IDictionaryEnumerator 13 5.13 IComparer 13 5.13.1 接口方法说明 int Compare(object x, object y) 13 5.13.2 ArrayList.Sort (IComparer) 方法 13 5.14 IComparer <T> 14 5.14.1 接口方法override int Compare(T x, T y)说明 14 5.14.2 List.Sort (IComparer) 方法 14 5.15 System.Linq.IGrouping<T> 14 5.16 System.Linq.ILookup<TKey,TElement> 14 5.17 System.Linq.IOrderedEnumerable<T> 14 5.18 System.Linq.IOrderedQueryable 14 5.19 System.Linq.IOrderedQueryable<T> 15 5.20 System.Linq.IQueryable 15 5.21 System.Linq.IQueryable<T> 15 5.22 System.Linq.IQueryProvider 15 6 集合扩展方法 15 6.1 集合扩展方法的实现:一个Where的例子 15 6.2 延迟类 15 6.2.1 Select 选择 16 6.2.2 SelectMany 选择 16 6.2.3 Where 条件 16 6.2.4 OrderBy 排序升 17 6.2.5 OrderByDescending 排序降 17 6.2.6 GroupBy 分组 17 6.2.7 Join 联合查询 18 6.2.8 GroupJoin 18 6.2.9 Take 获取集合的前n个元素 19 6.2.10 Skip 跳过集合的前n个元素 19 6.2.11 Distinct 过滤集合中的相同项 19 6.2.12 Union 连接不同集合,自动过滤相同项 19 6.2.13 Concat 连接不同集合,不会自动过滤相同项 19 6.2.14 Intersect 获取不同集合的相同项(交集) 20 6.2.15 Except 从某集合中删除其与另一个集合中相同的项 20 6.2.16 Reverse 反转集合 20 6.2.17 TakeWhile 条件第一次不成立就跳出循环 20 6.2.18 SkipWhile 条件第一次不成立就失效,将后面的数据全取 20 6.2.19 Cast 将集合转换为强类型集合 21 6.2.20 OfType 过滤集合中的指定类型 21 6.3 不延迟(浅复本) 21 6.3.1 Single 集合中符合条件的唯一元素,浅复本 21 6.3.2 SingleOrDefault 集合中符合条件的唯一元素(没有则返回类型默认值),浅复本 21 6.3.3 First 集合的第一个元素,浅复本 21 6.3.4 FirstOrDefault 集合中的第一个元素(没有则返回类型默认值),浅复本 22 6.3.5 Last 集合中的最后一个元素,浅复本 22 6.3.6 LastOrDefault 集合中的最后一个元素(没有则返回类型默认值),浅复本 22 6.3.7 ElementAt 集合中指定索引的元素,浅复本 22 6.3.8 ElementAtOrDefault 集合中指定索引的元素(没有则返回类型默认值),浅复本 22 6.3.9 Contains 判断集合中是否包含有某一元素 22 6.3.10 Any 判断集合中是否有元素满足某一条件 22 6.3.11 All 判断集合中是否所有元素都满足某一条件 23 6.3.12 SequenceEqual 判断两个集合内容是否相同 23 6.3.13 Count 、LongCount集合中的元素个数 23 6.3.14 Average 、Sum集合平均值求和 23 6.3.15 Max、Min 集合最大值,最小值 24 6.3.16 Aggregate 根据输入的表达式获取一个聚合值 24 6.3.17 DefaultIfEmpty 查询结果为空则返回默认值,浅复本 24 6.3.18 ToArray 将集合转换为数组,浅复本 24 6.3.19 ToList 将集合转换为List<T>集合,浅复本 25 6.3.20 ToDictionary 将集合转换为<K, V>集合,浅复本 25 7 Lambda表达式 25 7.1 例1(比效) 25 7.2 例2(多参) 27 7.3 例3(list.Where) 27 7.4 Lambda表达式中Lifting 28 8 QuerySyntax 查询语法 29 8.1 from in select 30 8.2 orderby 排序 30 8.3 group by into 分组 31 8.4 join in on equals 联合查询 33 8.5 into 汇总 33 9 DataSource 数据绑定 34
LINQ中文学习资料和LINQ 随身参考手册,其中LINQ 随身参考手册是英文版的,但内容不错。 LINQ 随身参考手册介绍:   Ready to take advantage of LINQ with C# 3.0? This guide has the detail you need to grasp Microsoft’s new querying technology, and concise explanations to help you learn it quickly. And once you begin to apply LINQ, the book serves as an on-the-job reference when you need immediate reminders. All the examples in the LINQ Pocket Reference are preloaded into LINQPad, the highly praised utility that lets you work with LINQ interactively. Created by the authors and free to download, LINQPad will not only help you learn LINQ, it will have you thinking in LINQ. This reference explains: LINQ’s key concepts, such as deferred execution, iterator chaining, and type inference in lambda expressions The differences between local and interpreted queries C# 3.0′s query syntax in detail-including multiple generators, joining, grouping, query continuations, and more Query syntax versus lambda syntax, and mixed syntax queries Composition and projection strategies for complex queries All of LINQ’s 40-plus query operators How to write efficient LINQ to SQL queries How to build expression trees from scratch All of LINQ to XML’s types and their advanced useLINQ promises to be the locus of a thriving ecosystem for many years to come. This small book gives you a huge head start. “The authors built a tool (LINQPad) that lets you experiment with LINQ interactively in a way that the designers of LINQ themselves don’t support, and the tool has all kinds of wonderful features that LINQ, SQL and Regular Expression programmers alike will want to use regularly long after they’ve read the book.” -Chris Sells, Connected Systems Program Manager, Microsoft   About the Author   Joseph Albahari is a core C# design architect at Egton Medical Information Systems, the largest primary healthcare software supplier in the UK. He has been developing large-scale enterprise applications on .NET and other platforms for more than 15 years, working in medical, telecommunication and education industries. Joseph specializes in writing custom components and controls, and has designed application component frameworks for three companies.   Ben Albahari is currently involved in the bioinformatics business. He was a Program Manager at Microsoft for 5 years, where he worked on several projects, including the .NET Compact Framework and ADO.NET.   He was the cofounder of Genamics, a provider of tools for C# and J++ programmers, as well as software for DNA and protein sequence analysis. He is a co-author of C# Essentials, the first C# book from O’Reilly, and of previous editions of C# in a Nutshell.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值