Linq学习笔记(一) -- 初识Linq

来源:互联网 发布:win32界面编程 编辑:程序博客网 时间:2024/06/11 23:52

目录

  • 目录
  • 什么是Linq
  • 查询表达式
    • 检索数据集合
    • 匿名类型
    • 延迟执行
    • 总结

什么是Linq

语言集成查询(LINQ)是一组技术的名称,而对于编写查询的开发人员来讲,LINQ最明显的语言集成部分就是查询表达式。它是使用C# 3.0中引入的声明性查询语法编写的,有了它,使得你可以使用非常简单的代码对各种数据源进行复杂的筛选、排序、分组等操作。
您可以使用同一个基本查询表达式来查询和转换SQL数据库、ADO.NET数据集、XML文档和流以及.NET集合中的数据。 ————LINQ查询表达式(C#编程指南)

由此可知,Linq使得在对象领域和数据领域为我们搭建了一座桥梁,是检索数据的集大成者。以往我们对数据库、XML、集合需要分别学习对应的知识;例如SQL脚本、对xml文件的操作以及对各种数据结构的集合的方法调用等;而有了Linq,使得我们可以通过Linq查询表达式就可以很方便的游走于各类数据源之间,而且Linq的优点还不止于此。

查询表达式

我们来看看Linq的查询表达式结构图:
Linq语法结构图

查询表达式的概述:

  • 查询表达式可用于查询和转换来自任意支持 LINQ 的数据源中的数据
  • 查询表达式中的变量都是强类型的,但许多情况下您不需要显式提供类型,因为编译器可以推断类型
  • 一些聚合方法如Count、Max等,没有等效的查询表达式子句,因此必须表示为方法调用
  • 查询表达式可以编译为表达式树或委托,具体取决于查询所应用到的类型。 IEnumerable 查询编译为委托。 IQueryable 和 IQueryable 查询编译为表达式树
  • 拥有延迟执行的特点

检索数据集合

我们先来写两个小例子,看看Linq的查询表达式是如何帮助我们检索数据的

int[] numbers = new int[] { 1, 21, 53, 4, 6435, 32, 6 };var result = from n in numbers             where n > 50             select n;foreach (var item in result){     Console.WriteLine(item);}//输出结果:53,6435//这里numbers换成任意支持Linq的数据集合都可以,比如List<int>

我们再看一个Dictionary的小例子

Dictionary<int, string> dics = new Dictionary<int, string>();dics.Add(1, "2");dics.Add(3, "4");dics.Add(5, "6");dics.Add(7, "8");var resultDic = from n in dics              where n.Key >= 5              select n;foreach (var item in resultDic){     Console.WriteLine(item.Value);}//输出结果:6,8

匿名类型

匿名类型的其他优点我们另做讨论,咱们先只在Linq中做个小例子,可以将数据源转换为我们需要的类型结构
代码示例如下:

//假设数据源为产品类public class Product{    public double Price { get; set; }    public string Name { get; set; }}//我们再新建一个数据集合List<Product> products = new List<Product>(){   new Product(){ Price = 2000.0, Name = "CPU"},   new Product(){ Price = 300.0, Name = "GPU"},};var result = from p in products             select new { Info = string.Format("产品名称为:{0},它的价格是:{1}", p.Name, p.Price) };//输出结果为://产品名称为:CPU,它的价格是:2000//产品名称为:GPU,它的价格是:300

延迟执行

Linq的查询操作分为三个部分
1.获取数据源
2.创建查询
3.执行查询

这也是Linq延迟执行的关键所在,就是将查询语句的创建与执行分开管理
以我们第一个简单的例子来说

//第一步获取数据源(XML、SQL皆可)int[] numbers = new int[] { 1, 21, 53, 4, 6435, 32, 6 };//第二步创建查询//这里并没有执行对数据的真实筛选,可以理解为只是编译了查询命令//比如这里的result变量可以看成是SQL语句://select * from numbers where n > 50,但是并未执行,类似视图var result = from n in numbers             where n > 50             select n; //第三步执行查询,当对数据源执行遍历或者需要读取数据的时候,才会执行foreach (var item in result){     Console.WriteLine(item);}

对元素执行聚类函数或转换函数等会使得对Linq表达式强制立即执行,比如Max、Average、First、ToList等

总结

综上所述,Linq帮助我们统一了访问方式,类似ORM框架对应各数据库的方式,让我们对数据的操作非常方便

感谢各位看官,小弟不才,如有不妥之处,还望指出,对我更是帮助

0 0
原创粉丝点击