版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-掌握LINQ查询的特点及组成掌握编写Lambda表达式掌握LINQ查询方法的使用掌握使用LINQ查询SQL数据库目标-2-LINQ简介LINQ(LanguageIntegratedQuery)是语言集成查询的简称,是VisualStudio2008和.NETFramework3.5中一项突破性的创新。是一个编程模型,提供统一的方法访问文件、XML、数据库等数据。LINQ有4部分组成:LINQtoObjects、LINQtoSQL、LINQtoDataSet和LINQtoXML。-3-LINQ查询所有LINQ查询操作都有如下3个步骤:获取数据源:指定数据源是数据库、XML还是普通的集合;创建查询:根据用户要求和LINQ的查询语法,设置查询语句;执行查询:从指定的数据源中找到符合条件的数据。//1.获取数据源int[]numbers=newint[]{3,20,47,6,9,8,81};//2.创建查询varnumQuery=numbers.Where(p=>p%2!=0).Select(p=>p);//3.执行查询foreach(intnuminnumQuery){ Console.Write(num+"");}-4-Lambda表达式-1Lambda表达式是一个匿名方法,它可以包含表达式和语句(参数列表)=>{方法体}参数列表中的参数都是匿名方法的输入参数,这些参数可以是明确类型或者是推断类型,如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来。=>是Lambda运算符,该运算符读为“goesto”,与赋值运算符(=)具有相同的优先级,并且是右结合运算符。方法体可以是单一的表达式,或多条语句组成的语句块。
-5-Lambda表达式-2Lambda示例:一个多参数、方法体多语句的Lambda表达式示例。(x,y)=>{ Console.WriteLine(x); Console.WriteLine(y);}如果参数列表只包含一个推断类型参数时,Lambda表达式可以简化成下面格式。参数名=>{方法体}p=>{returnp+1;}如果方法体只包含一条语句时,Lambda表达式又可以简化成下面格式。参数名=>表达式p=>p+1-6-Lambda表达式-3//1.获取数据源int[]numbers=newint[]{8,20,47,102,14,86,128};//2.创建查询,使用Lambda表达式对数据进行筛选varnumQuery=numbers .Where(p=>p>10&&p<100) .Where(p=>p%2==0) .Select(p=>p);//3.执行查询foreach(intnuminnumQuery){ Console.Write(num+"");}示例:使用Lambda表达式筛选出数组中的大于10小于100的偶数。-7-LINQ查询方法LINQ查询存在两种方式:查询方法:主要利用System.Linq.Enumerable类中定义的扩展方法和Lambda表达式进行查询,语法简洁并能完成一些复杂的查询操作,但可读性差。查询语句:一种更接近SQL语法的查询方式,具有更好的可读性。LINQ查询方法中提供了一些标准查询方法,如:Select()、Where()、OrderBy()等;还提供一些高级的查询方法,如:Count()、Skip()、Range()等。-8-Select()-1Select()查询方法用于选取数据,其语法格式如下:publicstaticIEnumerable<TResult>Select<TSource,TResult>( thisIEnumerable<TSource>source, Func<TSource,TResult>selector)Select方法本身是一个泛型扩展方法,作用于IEnumerable<TSource>类型。Select()方法的参数是Func<TSource,TResult>类型,Func<TSource,TResult>是一个泛型委托,位于System命名空间下System.Core.dll中。selector是一个提取器。
-9-Select()-2//1.获取数据源string[]names=newstring[]{"Tom","Rose","Mark","Lili"};//2.创建查询,使用Select()方法,将字符串变成大写varq=names.Select(p=>p.ToUpper());//3.执行查询foreach(stringeinq){ Console.WriteLine(e);}-10-Where()-1Where()查询方法可以使用条件对数据进行查询publicstaticIEnumerable<TSource>Where<TSource>( thisIEnumerable<TSource>source, Func<TSource,bool>predicate)Where()方法也是一个泛型扩展方法,同样作用于IEnumerable<TSource>类型。Where()方法的参数是Func<TSource,bool>泛型委托。predicate是一个判断条件。-11-Where()-2//1.获取数据源string[]names=newstring[]{"Tom","Rose","Tang","Mark","Lili"};//2.创建查询,使用Where()查询以“T”开头的字符串varq=names.Where(p=>p.StartsWith("T")).Select(p=>p.ToUpper());//3.执行查询foreach(stringeinq){ Console.WriteLine(e);}示例:演示Where()查询方法的使用。-12-OrderBy()-1OrderyBy()方法用于对数据进行排序publicstaticIOrderedEnumerable<TSource>OrderBy<TSource,TKey>( thisIEnumerable<TSource>source, Func<TSource,TKey>keySelector)OrderBy()方法也是一个泛型扩展方法,同样作用于IEnumerable<TSource>类型。OrderBy()方法参数是Func<TSource,TKey>泛型委托。keySelector指定要排序的字段。
-13-OrderBy()-2//1.获取数据源int[]numbers=newint[]{8,20,47,102,14,86,128};//2.创建查询,从数组中提取偶数并排序varnumQuery=numbers.Where(p=>p>10&&p<100) .Where(p=>p%2==0) .Select(p=>p) .OrderBy(p=>p);//3.执行查询foreach(intnuminnumQuery){ Console.Write(num+"");}示例:演示OrderyBy()查询方法的使用。-14-GroupBy()-1GroupBy()查询方法用于选取数据publicstaticIEnumerable<IGrouping<TKey,TSource>>GroupBy<TSource,TKey>( thisIEnumerable<TSource>source, Func<TSource,TKey>keySelector)GroupBy()方法也是一个泛型扩展方法,同样作用于IEnumerable<TSource>类型。GroupBy()方法的参数是Func<TSource,TKey>泛型委托。keySelector指定要分组的字段。-15-示例:演示GroupBy()查询方法的使用。GroupBy()-2List<string>foxRiver=newList<string>{ "Michael", "Lincoln", "Sucre",
"Abruzzi",
"T-Bag",
"C-Note",
"Tweener", "Charles"};//根据第一个字母对数据进行分组varq=foxRiver.GroupBy(p=>p.Substring(0,1));foreach(vargroupinq){ //输出分组关键字
Console.WriteLine(group.Key+":"); //输出组内元素
foreach(varitemingroup){ Console.WriteLine(item); } Console.WriteLine("--------------------");}-16-LINQ高级查询方法-1种类方法名描述聚合Count返回序列中元素的数量Max返回序列中的最大值Min返回序列中的最小值Average返回序列中元素的平均值Sum返回序列中元素的总和排序ThenBy使用OrderBy()对序列排序后,再通过ThenBy()进行复合排序分区Take提取序列中指定数量的连续元素TakeWhile根据指定条件提取序列中的元素,然后跳过剩余的元素Skip跳过序列中指定数量的元素,然后返回剩余的元素SkipWhile根据指定条件跳过序列中的元素,然后返回剩余的元素集合Distinct去掉序列中重复元素,返回非重复元素生成Range生成一个指定范围内的整数序列Repeat生成一个重复值的序列-17-示例:演示高级查询方法的使用。LINQ高级查询方法-2int[]numbers=newint[]{8,20,47,102,14,86,128};//求数组中偶数的个数varcount=numbers.Where(p=>p%2==0).Count();//数组中最大值varmax=numbers.Max();//数组中最小值varmin=numbers.Min();//数组中元素的平均值varavg=numbers.Average();//数组中元素的和varsum=numbers.Sum();List<string>foxRiver=newList<string>{
"Michael", "Lincoln", ......};//按照第一个字母排序后,再按照第二个字母排序varq=foxRiver.OrderBy(p=>p.Substring(0,1)).ThenBy(p=>p.Substring(1,1));//生成一个1到10的整数序列varnums=Enumerable.Range(1,10);//跳过序列的前2项,再提取连续3项vartake=nums.Skip(2).Take(3);//生成重复序列varrep=Enumerable.Repeat("QingDao",4);-18-LINQtoSQL查询-1使用LINQtoSQL可以使用LINQ技术访问SQL数据库,就像访问内存中的集合一样简单,且操作起来非常容易。1.创建对象模型LINQtoSQL的主要操作原理就是将数据库中的表和表关系映射为对象,这样操作对象其实就是操作数据库。在项目中“添加新项”时,选择“LINQtoSQL类”模板-19-LINQtoSQL查询-2点击“添加”按钮后,将生成一个设计界面,此时并没有与数据库映射。打开“服务器资源管理器”,右击“数据连接”选择“添加连接”命令,连接指定数据库,并点击“确定”按钮。此时,在“服务器资源管理器”窗口中显示连接的数据库及表。-20-LINQtoSQL查询-3将UserDetails表拖放到设计视图中,如下图所示。此时打开DataClasses1.dbml下的DataClasses1.designer.cs文件,这时保存对象关系映射的文件,其代码都是自动生成的,代码如下所示。publicpartialclassDataClasses1DataContext:System.Data.Linq.DataContext{ ......}[Table(Name="dbo.UserDetails")]publicpartialclassUserDetails:INotifyPropertyChanging, INotifyPropertyChanged{ ......}-21-LINQtoSQL查询-42.查询数据库使用LINQtoSQL查询数据库,代码如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Data.Linq;usingSystem.Text;namespacech11{ classSQLDemo { staticvoidMain(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于年度营销预算审批的通知函8篇范本
- 办公室电源故障紧急处理部门预案
- 化妆品销售顾问零售业绩考核表
- 小型餐饮业食品安全管理全面实施指南
- 教育培训机构教研组团队成果及工作效率KPI考核表
- 室内植物养护与环境改善方案
- 市场部市场调研方法与实践方案
- 2026事业单位笔试-上海-上海内分泌科(医疗招聘)历年参考题库含答案详解
- 2026事业单位工勤技能-黑龙江-黑龙江造林管护工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-黑龙江-黑龙江机械冷加工二级(技师)历年参考题库含答案详解
- UOM无人机安全操控理论合格证(2026)题库+答案详解
- LW36-126型户外自能式高压六氟化硫断路器安装使用说明书
- 《人民当家作主》教学课件 - 2026-2027 学年统编版(新教材)小学道德与法治五年级上册
- 血液透析用中心静脉导管护理专家共识(2025版)
- 2026年海战史测试题及答案
- 大学英语四级词汇表 (完美打印版)
- 变压器运行规定培训课件
- 清华大学出版社机械制图习题集参考答案第三版
- 两票及三种人培训
- 2026年医院科室绩效考核实施方案
- 《内科护理学》课程教学大纲
评论
0/150
提交评论