c# 学习笔记 - LINQ

文章目录

    • 1.LINQ概述
      • 1.1 LINQ介绍
      • 1.2 LINQ基本使用
      • 1.3 扩展方法介绍
      • 1.4 LINQ扩展
      • 1.5 总结
    • 2. 标准查询操作符
      • 2.1 筛选(索引、类型筛选....)
      • 2.2 from子句
      • 2.3 orderby排序
      • 2.4 group分组
    • 3. xxxxxxx

1.LINQ概述

1.1 LINQ介绍

 LINQ是语言集查询(Language Integrated Query, LINQ)的查询语言,其集成了c#当中的查询语法,可以通过相同的语法访问不同的数据源.
 我们来看一个一个简单的LINQ查询的语法,LINQ查询语法和我们熟悉SQL查询语句非常相似,从哪个数据源查询from,查询条件where,以及中间的数据处理orderby操作,最后使用select查询即可.

var query = from x in studentswhere x.age >= 2orderby x.age descendingselect x;
foreach(var x in query) {Console.WriteLine(x.age + " " + x.name);
}

 LINQ细节注意

  1. LINQ是一个查询语句,其必须以from子句开头,以select 或 group 子句结束. 在这两个子句之间可以使用where、orderyby、join、let、其他from子句.
  2. LINQ当中的子句from、where、select等都是查询中预定义的关键字。
  3. LINQ查询的执行不是在定义的时候执行,而是在foreach循环访问查询的时候执行查询操作.

1.2 LINQ基本使用

using System.Collections;
class students {public int age { get; set; }public string name { get; set; }public students(int v1, string v2) {this.age = v1;this.name = v2;}
}class Test {static void Main() {List<students> students = new List<students>(); // 定义数据源students.Add(new students(3, "张三"));students.Add(new students(1, "李一"));students.Add(new students(2, "王二"));var query = from x in students // 定义LINQ查询where x.age >= 2orderby x.age descendingselect x;foreach(var x in query) { // 使用foreach语句执行该查询Console.WriteLine(x.age + " " + x.name);}}
}/*
3 张三
2 王二
*/

1.3 扩展方法介绍

  介绍
在这里插入图片描述

  1. 在介绍LINQ的扩展方法之前,我们先来了解一下扩展方法的使用,扩展方法是对原有类或者是原有接口实现类的一个扩展,如果我们在这个类或者这个接口实现类上扩展的话,这个类或者是某个接口的实现类都可以拥有对这个方法的使用。
  2. 扩展方法是一种新语法,并且我们需要注意扩展方法的定义 (扩展方法声明在静态类 + 定义为静态方法 + 第一个参数定义扩展类型 + 第一个参数需要添加this )`
// 将方法添加string类当中
static class TestDelegate {static void sayHello(this string s, int x, int y) {Console.WriteLine("hello wordl....." + x + " " + y);}static void Main() {string s = new string("No hello....");s.sayHello(20, 24);}
}// hello wordl.....20 24
public interface IBase { // 接口void sayHi();
}public static class Strengthen { // 接口的实现类上进行扩展 public static void sayHello(this IBase ibase) {Console.WriteLine("Hello .....");}
}class Achieve : IBase { // 实现类public void sayHi() {Console.WriteLine("hi .....");}static void Main() {Achieve achieve = new Achieve();achieve.sayHi();achieve.sayHello();}
}
/*
hi .....
Hello .....
*/

1.4 LINQ扩展

  LINQ扩展 – Enumerable扩展介绍
在这里插入图片描述

  1. 在我们使用var变量定义出query查询后,我们使用foreach()去查询这个数据源的时候,因为foreach的底层数据源的查询的时候是需要实现IEnurable<>接口。
  2. 对于这个特性,LINQ为这个IEunerable<>接口提供了各种扩展方法,以此增强我们对LINQ语句的使用.(继承了IEnumerable接口的实现类都可以使用这个扩展语法)(不是关键字where 注意区分)

  LINQ样例举例分析(对于所有实现了IEnumerable接口都可以调用此Where方法)
  LINQ的Where扩展不是对where关键字的扩展,是对于所有实现了IEnumerable接口的一个扩展方法,不是对其本身where关键字,一定要注意这个区别
在这里插入图片描述

这个扩展就是对where关键字的扩展,传入一个实现了IEnumerable接口的实现类,通过了Func<>的一个判断,Fun是一个委托
(传入数据源和整形数据,返回一个bool类型的值的判定)
public class Example {public static void Main() {List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8};var query = list.Where((num, index) => num >= 3 && index % 2 == 1); // 利用扩展where完成(大小>=3 索引为奇数)foreach(var item in query) {Console.WriteLine(item); }}
}
// 4 6 8 
public class Example {public static void Main() {List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8};Func<int, int, bool> predicate = (num, index) => num >= 3 && index % 2 == 1;var query = list.Where(predicate);foreach(var item in query) {Console.WriteLine(item); }}
}
// 4 6 8 

1.5 总结

  1. LINQ是C#提供的集成查询语言(namesapce System,LINQ)
  2. LINQ当中有很多已经预定义完成关键字
  3. 为扩展LINQ当中的方法,LINQ有一个Enumerable类用于扩展方法,具体的扩展方式就是通过对方法进行重载,实现多种扩展方式,这样子对于所有实现该接口的类都可以一起使用这些扩展方法。不是对原本的关键字扩展,是对于实现了这些接口的实现类的统一方法的扩展。

2. 标准查询操作符

2.1 筛选(索引、类型筛选…)

 筛选的通用代码(案例只写LINQ查询的关键代码)

using System.Collections;
class students {public int age {get; set;}public string name {get; set;}public students(int v1, string v2){this.age = v1;this.name = v2;}
}class Test{static void Main(){List<students> students = new List<students>();students.Add(new students(1, "A1"));students.Add(new students(2, "B2"));students.Add(new students(3, "C3"));students.Add(new students(4, "A4"));students.Add(new students(5, "B5"));students.Add(new students(6, "C6"));var query = from r in studentswhere r.age >= 2 && r.age <= 5select r;foreach(var x in query) {Console.WriteLine(x.name + " " + x.age);}}
}

 筛选:

// 简单查询
var query = from r in studentswhere r.age >= 2 && r.age <= 5select r;// 使用了where() 与 select()扩展
var query = students.Where(r => r.age >= 2 && r.age <= 5).Select(r => r);

 索引筛选:

// 利用Where方法的重载方法扩展实现
var query = students.Where((r, index) => index % 2 == 0). // 索引默认从0开始排序Select(r => r);
using System.Collections;
class students {public int age { get; set; }public string name { get; set; }public students(int v1, string v2) {this.age = v1;this.name = v2;}
}class Test {static void Main() {List<students> students = new List<students>(); // 定义数据源students.Add(new students(3, "张三"));students.Add(new students(1, "李一"));students.Add(new students(2, "王二"));var query = from x in students.Where((x, index) => index % 2 == 0)  // Where不是对下面where关键字的扩展where x.name == "张三"orderby x.age descendingselect x;foreach(var x in query) { // 使用foreach语句执行该查询Console.WriteLine(x.age + " " + x.name);}}
}// 3 张三

 类型筛选:

// 使用OfType()扩展方法,将string类型参数传递给泛型参数
object[] data = { "one", 2, "three", 4, "five", 6 };
var query = data.OfType<string>();
foreach(var item in query) {Console.WriteLine(item);
}

2.2 from子句

2.3 orderby排序

2.4 group分组

3. xxxxxxx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/234959.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法每日一练]-练习篇 #Tile Pattern #Swapping Puzzle # socks

目录 今日知识点&#xff1a; 二维前缀和 逆序对 袜子配对(感觉挺难的&#xff0c;又不知道说啥) Tile Pattern Swapping Puzzle socks Tile Pattern 331 题意&#xff1a;有一个10^9*10^9的方格。W表示白色方格&#xff0c;B表示黑色方格。每个(i,j)方的颜色由(i…

还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~

相信很多使用 python 的小伙伴在工作中都遇到过&#xff0c;对数据进行相关编码或加密的需求&#xff0c;今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式&#xff0c;如何使用 python 去实现。话不多说&#xff0c;接下来直接进入主题&#xff1a; 前言 1…

phpstorm配置ftp

1 选择设置ftp 2设置自动上传

使用FFmpeg+EasyDarwin搭建音视频推拉流测试环境

1. 前言 在上一篇文章《使用VS2017在win10 x64上编译调试FFmpeg&#xff08;附源码和虚拟机下载&#xff09;》中&#xff0c;我们讲解了如何搭建FFmpeg源码编译和调试环境。 调试FFmpeg&#xff0c;还需要搭建流媒体服务器。流媒体服务器的作用是通过网络对外提供音视频服务…

CentOS本地部署SQL Server数据库无公网ip环境实现远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

简单易懂的PyTorch激活函数大全详解

目录 torch.nn子模块Non-linear Activations nn.ELU 主要特点与注意事项 使用方法与技巧 示例代码 图示 nn.Hardshrink Hardshrink函数定义 参数 形状 示例代码 图示 nn.Hardsigmoid Hardsigmoid函数定义 参数 形状 示例代码 图示 nn.Hardtanh HardTanh函数…

【QML COOK】- 006-用C++定义一个QML元素类型

Qt原本是一个C图形框架&#xff0c;因此QML也少不了C。QML通常只负责显示&#xff0c;而后台逻辑由C实现&#xff0c;因此掌握C和QML之间的交互非常必要。 本例实现一个最简单的例子&#xff0c;用C定义一个QML的元素类型并在QML使用它。 需求是在窗口上显示鼠标点击的次数。…

19道ElasticSearch面试题(很全)

点击下载《19道ElasticSearch面试题&#xff08;很全&#xff09;》 1. elasticsearch的一些调优手段 1、设计阶段调优 &#xff08;1&#xff09;根据业务增量需求&#xff0c;采取基于日期模板创建索引&#xff0c;通过 roll over API 滚动索引&#xff1b; &#xff08;…

01-你好Python-python环境安装 python解释器的安装 pycharm的安装

python环境安装 官方网址&#xff1a;https://python.org 这里可以下载最新版本的&#xff0c;下载完成以后在自己的浏览器文件下载的文件夹中找到该文件 下载速度可能会比较慢&#xff0c;这里已经提供好了文件&#xff0c;可以直接点击安装 点击Customize installation 点击…

PCL 格网法计算点云的占地面积

目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 该方法主要用于粗略统计机载点云的占地面积。方法原理是将点云沿 X O Y XOY

渐进增强与优雅降级:提升用户体验的双重策略

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

外包做了5个月,技术退步一大半了。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

23111 IO进程线程 day8

使用信号灯集完成三个进程的同步&#xff0c;A进程输出字符A&#xff0c;B进程输出字符B&#xff0c;C进程输出字符C&#xff0c;要求输出结果为ABCABCABCABCABC... #include<myhead.h> #include "sem.h"int main(int argc, const char *argv[]) {pid_t pid…

救赎之道,就在其中

时光荏苒&#xff0c;不知不觉距离我踏入职场的第一天已经快一年了。最近也是看到平台举办年度征文活动&#xff0c;借此契机重新审视自己这两年来的成长历程&#xff0c;也希望对正在迷茫的人提供一些精神上的慰藉。 1.对未来的迷茫 如果要给两年前的自己打上标签&#xff0…

【Linux Shell】7. printf 命令

文章目录 【 1. printf 命令的使用方法 】【 2. 实例 】2.1 printf 换行/不换行的区别2.2 格式化控制输出2.3 引号对输出的影响2.4 参数数量对输出的影响 【 1. printf 命令的使用方法 】 printf 命令模仿 C 程序库&#xff08;library&#xff09;里的 printf() 程序&#xf…

python flask图书管理系统带文档

python flask图书管理系统带文档。功能&#xff1a;登录&#xff0c;图书的增删改查&#xff0c;读者管理&#xff0c;借阅记录&#xff0c;有文档。 技术&#xff1a;python3,flask,mysql,html。 包含源码数据库文件文档。 源码下载地址&#xff1a; https://download.csd…

Python画国旗

前言 今天&#xff0c;我们来用turtle库来绘制国旗 一、美国国旗 国旗的形状是长方形;国旗的长宽之比为19:10&#xff0c;美国国旗由红、白、蓝三色组成;画面格局由两部分组成&#xff0c;旗的左上方蓝底上排列着50颗白色的星&#xff0c;6颗一排与5颗一排相间排列&#xff…

Fluids —— Minimal fluid setups

目录 Waterline FLIP Boundary Boundary flow 创建流体设置的三个基本方法&#xff1b; Waterline 由FLIP Container SOP与FLIP Solver SOP组成的基本network&#xff0c;可不需要任何外部源&#xff1b; FLIP Container SOP&#xff0c;能使用不同的容器形状&#xff1b;F…

【SQL】对表中的记录通过时间维度分组,统计出每组的记录条数

场景&#xff1a;一般用作数据统计&#xff0c;比如统计一个淘宝用户在年、月、日的维度上的订单数。 业务&#xff1a;一个集合&#xff0c;以时间维度来进行分组求和。 准备一张订单表order&#xff0c;有一些常规属性&#xff0c;比如创建时间&#xff0c;订单号。 DDL语句如…

一文了解Git(所有命令)附带图片

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 其他…