LINQ简介
一、什么是LINQ
长期以来,开发社区形成以下的格局:
1、面向对象与数据访问两个领域长期分裂,各自为政。
2、编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如:
C#中字符串用string数据类型表示。
SQL中字符串用NVarchar/Varchar/Char数据类型表示。
3、SQL编码体验落后
没有智能感知效果。
没有严格意义上的强类型和类型检查。
4、SQL和XML都有各自的查询语言,而对象没有自己的查询语言。
上面描述的问题,都可以使用LINQ解决,那么究竟什么是LINQ呢?
LINQ(Language Integrated Query)即语言集成查询。
LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询,它在对象领域和数据领域之间架起了一座桥梁。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。
LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。
LINQ主要包含以下三部分:
1、LINQ to Objects 主要负责对象的查询。
2、LINQ to XML 主要负责XML的查询。
3、LINQ to ADO.NET 主要负责数据库的查询。
LINQ to SQL
LINQ to DataSet
LINQ to Entities
二、LINQ的优势
1、熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习新的语言。
2、更少的编码:相比较传统的方式,LINQ减少了要编写的代码量。
3、可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。
4、标准化的查询方式:可以使用相同的LINQ语法查询多个数据源。
5、类型检查:程序会在编译的时候提供类型检查。
6、智能感知提示:LINQ为通用集合提供智能感知提示。
7、整形数据:LINQ可以检索不同形状的数据。
三、LINQ的操作步骤
所有的Linq查询操作都由以下三个不同的操作组成:
1.获得数据源
想要使用Linq进行查询,数据源必须支持IEnumerable或IEnumerable(T)泛型接口或派生接口(如泛型的IQueryable(T)接口)。
2.创建查询
查询指定要从数据源中检索的信息
查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化
查询存储在查询变量中,并用查询表达式进行初始化。为使编写查询的工作更加容易,C#引入了新的查询语法
3.执行查询
查询变量本身只是存储查询命令。实际的查询执行会延迟在foreach语句中循环访问变量时发生。此概念称为“延迟执行”。
强制立即执行,可以通过以下两个方法,使得Linq立即执行查询
执行聚合函数(Count、Max、Average、First)。
调用ToList(<T>Source)或ToArray(<T>Source)方法缓存结果。
四、LINQ的案例
案例一:
学生类
//學生類 public class Student { private string name; private List<int> score; public string Name { get { return name; } set { name = value; } } public List<int> Score { get { return score; } set { score = value; } } }
数据查询
//数据源 IList<Student> students = new List<Student> { new Student{ Name="Kevin", Score=new List<int>{89,93,88,78}}, new Student{ Name="Jackie",Score=new List<int>{92,87,83,91}}, new Student{ Name="Helen",Score=new List<int>{53,76,72,62}} }; //所有的Linq查询操作都由以下三个不同的操作组成: //1.获得数据源 //2.创建查询 //3.执行查询 //使用复合from子句查询命令 var getStudent = from student in students from score in student.Score where score > 90 select new { Name = student.Name, Score = score }; foreach (var st in getStudent) { Console.WriteLine("NAME:{0},SCORE:{1}",st.Name,st.Score); }
结果:
我们可以看到学生对象中有个Score属性,Score属性本身就是List集合,这时候我们就要用到复合from子句进行查询了。首先遍历学生对象集合中的每个学生对象,然后在用另一个from子句,对每个学生对象中的Score属性进行遍历,筛选出含有90分以上的学生信息进行返回。
案例二:
namespace Demo { // 定义委托 delegate bool FindEven(int item); class IntExtension { public static int[] where(int[] array, FindEven dele) { int[] result = new int[5]; int i = 0; foreach (int item in array) { if (dele(item))//调用下面的 delegate (int item) { result[i] = item; i++; } } return result; } } class Program { static void Main(string[] args) { // 查询出数组中的偶数并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; //delegate(int item){return item % 2 == 0;}表示委托的实现 List<int> list = IntExtension.where(ints, delegate (int item) { return item % 2 == 0; //return item % 2 != 0; 奇数 }).ToList(); // 正序排序 list.Sort(); // 反转 list.Reverse(); // 输出 Console.WriteLine(string.Join(",", list)); Console.ReadKey(); } } }
结果:
通过泛型委托实现对Int数组ints实现偶数输出并排序;
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/14777833.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明:
本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。
<!–
【微信公众号】: –>
<!–
–> <!–
–>
今天的文章一、LINQ简介_linq java分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/46482.html