Linq基础学习资料.docx

上传人:飞****2 文档编号:56714524 上传时间:2022-11-03 格式:DOCX 页数:82 大小:236.61KB
返回 下载 相关 举报
Linq基础学习资料.docx_第1页
第1页 / 共82页
Linq基础学习资料.docx_第2页
第2页 / 共82页
点击查看更多>>
资源描述

《Linq基础学习资料.docx》由会员分享,可在线阅读,更多相关《Linq基础学习资料.docx(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Linq基础学习目录 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 3 3.3 Hashtable 6 3.4 SortedList 6 3.5 SortedList 7 3.6 Queue 8 3.7 Sta

2、ck 8 3.8 LinkedList 8 3.9 HashSet 9 4 System.Linq 10 4.1 System.Linq.Enumerable 10 4.2 System.Linq.Queryable 10 4.3 System.Linq.Lookup 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 12 5.3 IEnumerator 12 5.4 IColl

3、ection 12 5.5 ICollection 13 5.6 IList 13 5.7 IList 13 5.8 IEqualityComparer 13 5.9 IEqualityComparer 13 5.10 IDictionary 13 5.11 IDictionary 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 14

4、5.14.1 接口方法override int Compare(T x, T y)说明 14 5.14.2 List.Sort (IComparer) 方法 14 5.15 System.Linq.IGrouping 14 5.16 System.Linq.ILookup 14 5.17 System.Linq.IOrderedEnumerable 14 5.18 System.Linq.IOrderedQueryable 14 5.19 System.Linq.IOrderedQueryable 15 5.20 System.Linq.IQueryable 15 5.21 System.Li

5、nq.IQueryable 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.

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

7、将集合转换为强类型集合 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 集合中的最后一个元素(没有则返回类型默认值),浅复本

8、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 Ma

9、x、Min 集合最大值,最小值 24 6.3.16 Aggregate 根据输入的表达式获取一个聚合值 24 6.3.17 DefaultIfEmpty 查询结果为空则返回默认值,浅复本 24 6.3.18 ToArray 将集合转换为数组,浅复本 24 6.3.19 ToList 将集合转换为List集合,浅复本 25 6.3.20 ToDictionary 将集合转换为集合,浅复本 25 7 Lambda表达式 25 7.1 例1(比效) 25 7.2 例2(多参) 27 7.3 例3(list.Where) 27 7.4 Lambda表达式中Lifting 28 8 QuerySynta

10、x 查询语法 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查询结果集 LinqSystem.Collections.Generic.IEnumerableLinq to DataSetSystem.Data.EnumerableRowCollectionLinq to SQLSystem.Linq.IQueryableLinq to XMLSystem.Collect

11、ions.Generic.IEnumerableSystem.Array 数组 所有数组都继承于System.Array,数组可以用System.Array建立 数组可以是一维也可以是多维数组。维数对应于用来识别每个数组元素的下标个数。维数可以多达 32 维。 数组的每一维都有一个非零的长度。在数组的每一维中,数组元素按下标 0 到该维最高下标值连续排列.数组没有固定大小。数组在创建以后仍可以改变大小。 数组是对象,因此每种数组类型都是一个单独的引用类型。这意味着: 1.数组变量中含有指向数据的指针,这些数据包含元素、秩和长度信息。 2.在将一个数组变量赋值给另一个数组变量时,只有指针进行了复

12、制。 3.两个数组变量只有在具有相同的维数和元素数据类型时,才能看成是同一数据类型的数组变量。 基于System.Array定义数组 System.Array x=System.Array.CreateInstance(typeof(string),7); x.SetValue(4,0); x.SetValue(8,1); x.SetValue(7,2); x.SetValue(1,3); x.SetValue(3,4); x.SetValue(2,5); x.SetValue(5,6); System.Console.WriteLine(x.GetValue(5);使用这种方式声明,只能用S

13、etValue与GetValue方法进行赋值与取值, 不能使用xi的方式,也不会有xi.方法() 出现基于类型定义数组 类型, 数组名 = new 类型该维个数, 该维个数;类型, 数组名; 数组名 = new 类型个数,个数;类型, 数组名; 数组名 = new 类型, 值1, 值2, 值3,值1, 值2, 值3;类型, 数组名 = 值1, 值2, 值3,值1, 值2, 值3; 类型 数组名 =值1, 值2, 值3;数组元素的清空 数组名 = null;这时不只数组中的元素数据被清空了,而且数组的元素也被清空了. 如果要再使用该数组,需要用重新指定维中的元素个数. 数组的维结构不能被清除.S

14、ystem.Array类静态成员 清空指定数组位置中元素的值Array.Clear(数组名, 从第几个开始, 清除几个)把源数组名中的数据复制到目标数组名Array.Copy(源数组名, 目标数组名, 要复制的个数)按升序排列.只能对一维数组使用Array.Sort(数组名)对数组中的元素的顺序返转.Array.Reverse(数组名)从前向后在数组中查找指定的值.反回在数组中的位置值,如果没找到返回-1,第一个位置是0.i= Array.IndexOf (数组名,要找的内容,开始位置)从后向前在数组中查找指定的值.反回在数组中的位置值,如果没找到返回-1,第一个位置是0.i = Array.

15、LastIndexOf (数组名,要找的内容,开始位置)不用循环填充数组 string v = new string50; v0 = wxwinter; System.Collections.ArrayList.Repeat(v0, v.Length).CopyTo(v);泛型方法见集合的实例泛型方法 数组类实例成员 属性Rank 返回数组的维数属性Length 返回数组中元素的个数.方法GetLength(维数) 返回指定维数中元素的个数.第一维是0扩展方法见集合扩展方法 System.Collections 集合 ArrayList System.Collections 一个数组型集合,使

16、用的是随顺存储 实例成员 Capacity属性获取或设置 ArrayList 可包含的元素数.当实际元素超过Capacity属性时,Capacity属性会在原来的数值上翻倍Count属性集合中元素的个数int = Add(object)将对象添加到集合尾部AddRange(Array/List)将 ICollection 的元素添加到 ArrayList 的末尾object = Clone()创建 ArrayList 的浅表副本ArrayList =GetRange (index, count)源 ArrayList 中元素的子集. 可以看成一个视图,两个集合数据是同步的Insert(i,ob

17、ject)将对象插入到集合的指定位置InsertRange (index,Array/List)将 ICollection 的元素插入到 ArrayList 的指定索引处Remove(object)从集合中移除指定对象RemoveAt(index)从集合中移除指定位置处的对象RemoveRange (index,count)从 ArrayList 中移除一定范围的元素SetRange (index,Array/List)将参数中的集合覆盖到调用该方法的集合的指定位置Reverse()返转集合中的对象Sort()对集合排序 对象集合见 System.IComparable接口 Sort (ICo

18、mparer) 方法见 System.Collections.IComparer 接口Clear()清除集合中所有元素向后查找Integer=集合名.IndexOf (要找的内容变量,开始找的位置) 从前向后在数组中查找指定的值.反回在数组中的位置值,如果没找到返回-1,第一个位置是0.向前查找Integer =集合名. LastIndexOf(要找的内容变量,开始位置) 从后向前在数组中查找.反回在数组中的位置值,如果没找到返回-1访问集合中的成员集合index静态成员 ArrayList ls2 = ArrayList.FixedSize(ls1)ls2的元素允许修改,但不允许添加或移除。

19、 两个集合数据是同步的ArrayList ls2 = ArrayList. ReadOnly(ls1)ls2的元素只读。 两个集合数据是同步的List System.Collections.Generic System.Collections.Generic.List jh = new List(); jh.Add(new TextBox(); jh.Add(new TextBox(); jh.Add(new TextBox(); int i = 100; foreach (System.Windows.Forms.TextBox tp in jh) i = i + 100; tp.Text

20、=i.ToString(); tp.Left = i; this.Controls.Add(tp); class a public a(string v) s = v; public string s; /使用 System.Collections.Generic.List jh = new List(); jh.Add(new a(123); jh.Add(new a(456); jh.Add(new a(789); foreach (a tp in jh) System.Console.WriteLine(tp.s); 除ArrayList方法外 ConvertAll public Lis

21、t ConvertAll (Converter converter)创建复本 调用委托 System.Converter public delegate TOutput Converter(TInput input); 将对象从一种类型转换为另一种类型的方法1. 将当前 List 中的元素转换为另一种类型,并返回包含转换后的元素的列表 标准委托public static void Main() List ls = new List() 1, 2, 3 ; /System.Converter cw=new Converter(stringToint); /List li = ls.Convert

22、All(cw); List li= ls.ConvertAll(stringToint); public static int stringToint(string s) return int.Parse(s); 匿名方法List ls = new List() 1, 2, 3 ; List li = ls.ConvertAll(delegate(string s) return int.Parse(s); );Lambda表达式List ls = new List() 1, 2, 3 ; List li = ls.ConvertAll(i=int.Parse(i);集合扩展方法List ls

23、 = new List() 1, 2, 3 ; / System.Collections.Generic.IEnumerable li = ls.Select(i = int.Parse(i); ; var li = ls.Select(i=int.Parse(i);1. 将当前 List 中的元素值批量修改 static void Main(string args) List ls = new List() 1, 2, 3 ; List li = ls.ConvertAll(stringAdd); public static string stringAdd(string s) return

24、 s+wxd; ForEach public void ForEach ( Action action)对 List 的每个元素执行指定操作 调用委托 System.Action public delegate void Action (T obj) 对传递给它的对象执行某个操作的方法的委托标准委托static void Main(string args) List ls = new Listwxd,lzm; / System.Action w = new System.Action(wxdPrint); / ls.ForEach(w); ls.ForEach(wxdPrint); stati

25、c void wxdPrint(string s) Console.WriteLine(s); 匿名方法List ls = new Listwxd,lzm; ls.ForEach(delegate(string name) Console.WriteLine(name); );Lambda表达式List ls = new List wxd, lzm ; ls.ForEach(v= Console.WriteLine(v);集合扩展方法Find、FindLast、FindIndex、FindLastIndex、Exists、TrueForAll public T Find (Predicate

26、match)检索与条件匹配的所有元素,并返回整个 List 中的第一个匹配元素,其中包含与指定谓词所定义的条件相匹配的所有元素;否则为一个空 List 创建复本 FindLast 返回索引值 public T FindLast ( Predicate match)FindIndex 返回索引值 public int FindIndex ( Predicate match)FindLastIndex 返回逻辑型 public int FindLastIndex ( Predicate match)Exists 返回逻辑型 public bool Exists ( Predicate match)

27、TrueForAll 返回逻辑型,确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配 public bool TrueForAll ( Predicate match)调用委托 System.Predicate public delegate bool Predicate(T obj); 定义一组条件并确定指定对象是否符合这些条件的方法标准委托public static void Main() List ls = new List() 1, 2, 3 ; /System.Predicate cw = new Predicate(wxdFind); / int a = ls.Fin

28、d(cw); int a = ls.Find(wxdFind); public static bool wxdFind(int v) bool b = (v = 2);/ 查找条件 return b; 匿名方法List ls = new List() 1, 2, 3 ; int a = ls.Find(delegate(int v) bool b = (v = 2); return b; );Lambda表达式List ls = new List() 1, 2, 3 ; int a = ls.Find(v = v = 2);FindAll public List FindAll (Predic

29、ate match)检索与条件匹配的所有元素,如果找到,则为一个 List,其中包含与指定谓词所定义的条件相匹配的所有元素;否则为一个空 List 创建复本 调用委托 System.Predicate public delegate bool Predicate(T obj); 定义一组条件并确定指定对象是否符合这些条件的方法标准委托public static void Main() List ls = new List() 1, 2, 3 ; / System.Predicate cw = new Predicate(WxdFind); /List li = ls.FindAll(cw);

30、List li = ls.FindAll(WxdFind); public static bool WxdFind(int v) bool b = (v = 2);/ 查找条件 return b; 匿名方法List ls = new List() 1, 2, 3 ; List li = ls.FindAll(delegate(int v) bool b = (v = 2);return b; );Lambda表达式List ls = new List() 1, 2, 3 ; List li = ls.FindAll(v = v = 2);集合扩展方法/以视图形式,不创建复本 List ls =

31、 new List() 1, 2, 3 ,4,5; /System.Collections.Generic.IEnumerable li = ls.Where(i = i i 3);RemoveAll public int RemoveAll (Predicate match) 移除与指定条件相匹配的所有元素。 调用委托 System.Predicate public delegate bool Predicate(T obj); 定义一组条件并确定指定对象是否符合这些条件的方法标准委托static void Main(string args) List ls = new List() 1,2

32、, 2, 3,4,5 ; /System.Predicate cw = new Predicate(WxdRem); /int n = ls.RemoveAll(cw); int n = ls.RemoveAll(WxdRem); /n为移除的个数 public static bool WxdRem(int v) bool b = (v = 2);/ 条件 return b; 匿名方法List ls = new List() 1,2, 2, 3,4,5 ; int n = ls.RemoveAll(delegate(int v) bool b = (v = 2);return b; );Lam

33、bda表达式List ls = new List() 1, 2, 3 ; ls.RemoveAll(v = v=2 );Sort public void Sort ( Comparison comparison)对 List 或它的一部分中的元素进行排序 Sort ()方法见 System.IComparable接口、System.IComparable接口 Sort (IComparer) 方法见 System.Collections.IComparer 接口、System.Collections.Generic.IComparer 接口 调用委托 System.Comparison pub

34、lic delegate int Comparison (T x,T y) 表示比较同一类型的两个对象的方法 x 小于 y 返回小于0的负数 x 等于 y 返回0 x 大于 y 返回大于0的正数标准委托static void Main(string args) List ls = new List1,3,2,4,5,0,8,1; / System.Comparison w = new Comparison(wxdSort); / ls.Sort(w); ls.Sort(wxdSort); static int wxdSort(int x,int y) int v = x - y; return

35、 v; /return -v; /升序 匿名方法List ls = new List1,3,2,4,5,0,8,1; ls.Sort(delegate(int x, int y) return x - y; );Lambda表达式List ls = new List 1, 3, 2, 4, 5, 0, 8, 1 ; ls.Sort(x, y) = y - x);集合扩展方法/以视图形式,不创建复本 /不改变原集合的顺序 List ls = new List() 1, 3, 2, 4, 5, 0, 8, 1 ; /System.Collections.Generic.IEnumerable li

36、 = ls.OrderBy(i = i); var li = ls.OrderBy(i = i);Hashtable System.Collections System.Collections.DictionaryEntry 结构 字典键/值对 散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 哈希表使用的是链式存储 哈希表使用键值对的方式来存储 哈希表中,键名不能重复 添加键对实例.Add(键,值);查找值bool = 实例.ContainsValue(值

37、)查找键bool = 实例.ContainsKey(键)移除键对实例.Remove(键)清空集合实例.Clear()通过键访问值x键得到所有键集合foreach(object t1 in x.Keys) System.Console.WriteLine(t1);得到所有值集合foreach(object t2 in x.Values) System.Console.WriteLine(t2);得到所有键值对集合foreach(object zd in x) System.Collections.DictionaryEntry obj =(DictionaryEntry)zd; System.C

38、onsole.WriteLine(obj.Key); System.Console.WriteLine(obj.Value); SortedList System.Collections SortedList将ArrayList与Hashtable的功能集成 集合容量实例.Capacity 属性查找键bool = 实例.ContainsKey(键)查找值bool = 实例.ContainsValue(值)得到索引处值object =实例.GetByIndex(index)设置索引处值实例.SetByIndex(3,值)通过键访问值实例键移除键对实例.Remove(键)移除索引处键对实例.Rem

39、oveAt(index)得到所有值集合得到所有键值对集合得到所有键值对集合SortedList System.Collections.Generic /System.IComparable /定义通用的比较方法,由值类型或类实现以创建类型特定的比较方法。 class a : System.IComparable public a(string va,int le) s = va; l = le; public string s; public int l; /实现System.IComparable.CompareTo public int CompareTo(object obj) if (

40、object.Equals(this, obj) return 0; else return 1; /使用 System.Collections.Generic.SortedList jh=new SortedList(); a k1 = new a(123,0); a k2 = new a(456,100); a k3 =new a(789,200); jh.Add(k1, new TextBox(); jh.Add(k2, new TextBox(); jh.Add(k3, new TextBox(); /值操作 foreach (TextBox tp in jh.Values) this

41、.Controls.Add(tp); /键操作 foreach (a tp in jh.Keys) tp.s = ok; /键值对操作 foreach (System.Collections.Generic.KeyValuePair tp in jh) tp.Value.Text = tp.Key.s; tp.Value.Left = tp.Key.l; /通过键操作值 jhk2.Text = hello;Queue System.Collections.Generic class a public a(string v) s = v; public string s; /使用 System.Collections.Generic.Queue jh = new Queue(); /入队 jh.Enqueue(new a(a); jh.Enqueue(new a(b); jh.Enqueue(new a(c); /出队:每执行一次出一个 if (0 != jh.Count) a obj = jh.Dequeue(); System.Console.WriteLine(obj.s); Stack System.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁