.net-----语言集成查询LINQ

前言

  • 相关语言要素
    初始值设定项、匿名类型、Lambda表达式、扩展方法

  • LINQ的概念和基本操作

  • 标准查询运算符

  • LINQ to Objects概述

相关语言要素

初始值设定项、匿名类型、Lambda表达式、扩展方法

初始值设定项

在这里插入图片描述
在这里插入图片描述

  • 初始值设定项特别适用于LINQ 查询表达式
  • 匿名类型只能使用对象初始值设定项进行初始化

匿名类型

  • 由一组只读属性组成的类类型

  • 隐式类型(var)
    必须在定义时初始化,不能赋值为null

  • 匿名类型声明和使用:

var 匿名类型变量 = new {公共只读属性组};

在这里插入图片描述

相关语言要素

  • 匿名类型并不是无类型

  • 匿名类型只是无需预先显式定义

  • 声明匿名类型变量时,通过初始值选项指定的类型,其类型名由编译器生成

Lambda表达式

  • 是一个匿名函数,可以包含表达式和语句,并且可用于创建委托或表达式目录树类型

  • Lambda运算符: =>(“goes to”)

在这里插入图片描述

  • 常用在基于方法的LINQ查询中,作为诸如where等标准查询运算符方法的参数

扩展方法

  • 扩展方法向现有类型“添加”方法,而无需修改原类型的代码(或创建新的派生类型)并重新编译

*扩展方法定义为单独的命名空间中静态类中的静态方法

  • System.Collections.IEnumerable 和 System.Collections.Generic.IEnumerable类型添加了LINQ标准查询功能,只要通过using System.Linq指令导入其命名空间

  • 使用using指令将包含扩展方法的命名空间显式导入到源代码

LINQ的概念和基本操作

集成语言查询LINQ

  • 不同数据源使用不同的查询语言,大大增加开发复杂度

  • LINQ提供一种一致的数据查询模型,用相同的编码模式来查询和转换各种数据源

  • 定义了一组通用标准查询运算符,可以投影、筛选和遍历内存中的集合或数据库中的表

  • SQL Server 数据库

  • XML 文档

  • ADO.NET 数据集

  • 支持IEnumerable或泛型IEnumerable接口的任意对象集合

  • 其他数据源:Web服务和其他数据库(使用第三方的 LINQ 提供程序
    在这里插入图片描述

LINQ查询操作

  1. 获取数据源

  2. 创建查询

  3. 执行查询
    在这里插入图片描述

 //步骤1. 获取数据源
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

//步骤2. 创建查询:从整数数组中返回所有偶数
//方法1:使用查询方法声明查询变量
var numQuery1 = numbers.Where((num) => (num % 2) == 0);
//方法2:使用查询表达式声明查询变量
var numQuery2 =         //查询变量(用以存储查询)
from num in numbers  //必须以from子句开头:指定数据源和范围变量
where (num % 2) == 0 //筛选子句(可选)
select num;  //必须以select子句(选择对象序列)或group子句(分组)结尾

//步骤3. 执行查询并显示查询结果
Console.Write("numQuery1内容如下:");//方法1(查询表达式)查询结果
foreach (var num in numQuery1) Console.Write("{0,1} ", num);
Console.Write("\nnumQuery2内容如下:"); //方法2(查询方法)查询结果
foreach (var num in numQuery2) Console.Write("{0,1} ", num);

标准查询运算符

数据排序

  • 排序操作按一个或多个属性对序列的元素进行排序
  • 第一个排序条件对元素执行主要排序
  • 第二个排序条件则对主要排序结果再进行排序
string[] words = { "the", "quick", "brown", "fox", "jumps" };
foreach (var w in words) Console.Write("{0} ", w);

var q1 = from w in words orderby w.Length descending, w.Substring(0, 1) descending select w;
foreach (var w in q1) Console.Write("{0} ", w);

var q2 = words.OrderByDescending(w => w.Length).ThenByDescending(w => w.Substring(0, 1));
foreach (var w in q2) Console.Write("{0} ", w); 

数据筛选

筛选操作将结果集限制为只包含那些满足指定条件的元素
OfType, Where(where)

数据投影

对属性执行数学函数)以构建仅包含必须属性的新类型
Select(select), SelectMany
将对象转换为一种新形式的操作,通过映射属性(直接映射、或

数据分组

将数据按共享公共属性进行分组,以便对每个组中的元素进行处理
GroupBy(group…by, group…by…into…)

int[] numbers = { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 };
var q1 = from n in numbers group n by n % 2;
var q2 = numbers.GroupBy(n => n % 2);

联接运算

将一个数据源中的对象与另一个数据源中共享某个公共属性的对象关联起来
Join, GroupJoin,…

var q12 = categories.Join(products, c => c.ID, p => p.categoryID, (c, p) => new { CategoryName = c.Name, ProductID = p.ID, ProductName = p.Name });

var q22 = categories.GroupJoin(products, c => c.ID, p =>p.categoryID,(c, ps) => new { CategoryName = c.Name, Nums = ps.Sum(p => p.num) });

数据分区

在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分
Skip, SkipWhile, Take, TakeWhile

限定运算

返回一个 Boolean 值,该值指示序列中是否有一些元素满足条件或是否所有元素都满足条件
All, Any, Contains

聚合运算

从数据集计算单个值
Average, Count, Max, Min, Sum,…

集合运算

针对2个集合进行相应的集合运算
Distinct, Except, Intersect, Union

生成运算

用于创建新的值序列
DefaultIfEmpty, Empty, Range, Repeat

元素操作

从一个序列返回单个特定元素
First, Last, Single, ElementAt,…

串联运算

将一个序列追加到另一个序列
Concat

相等运算

比较两个序列,如果两个序列的对应元素相等且这两个序列具有相同数量的元素,则这两个序列相等
SequenceEqual

数据类型转换

更改输入对象的类型
OfType, ToArray, ToList, …

LINQ to Objects概述

  • 通过LINQ to Objects,可以直接针对实现IEnumerable或IEnumerable接口的集合,执行LINQ查询,而无需使用中间LINQ提供程序或API

  • 获取数据源

  • 创建查询

  • 执行查询

LINQ和字符串

  • LINQ 可用于查询和转换字符串和字符串集合

  • LINQ和文件目录
    LINQ非常适用于文件系统操作查询

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉卧考场君莫笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值