当前位置: 首页 > news >正文

C# LINQ语法

什么是 LINQ?

LINQ(Language Integrated Query)是C#语言中的一个强大功能,开发者可以使用类似SQL的查询语法,直接在C#代码中对各种数据源进行查询操作。LINQ的设计目标是提供一种统一的查询方式,无论数据源是数组、集合、数据库还是XML文档。

LINQ 查询语法

  • from 关键字,从哪里查,n 查询变量,查询变量命名和变量相同
  • in 在哪个数据源中查询 numbers 数据源(数组、集合、数据库、XML)
  • select new { 数字 = n, 相乘 = n * n }; 查询结果
  • 数据源后,是查询条件,和SQL的查询条件类似,但是有区别
  • 筛选条件:== ,!=,>,>=,<,<=, 逻辑运算符 &&,||,!
  int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };var selectedNumbers=from n in numbers where n>2 select new { 数字 = n, 相乘 = n * n };foreach (var s in selectedNumbers){Console.WriteLine($"数字: {s.数字}, 相乘: {s.相乘}");}
 int[] numbers = { 1, 2, 3, 5, 4, 9, 8, 7, 6, 10 };//selectedNumbers的类型是查询结果的类型IEnumerable<string> selectedNumbers = from n in numberswhere n > 2//排序: descending 降序 ascending 升序orderby n ascending//查询结果将来可以过滤,格式化等select "数字:" + n;foreach (var s in selectedNumbers){Console.WriteLine(s);}

结果

查找名字中有“a”的人名

string[] names = { "Alice", "Bob", "Charlie", "David" };
var selectedNames = from name in names where name.IndexOf("a") != -1 select name;
foreach (var name in selectedNames)
{Console.WriteLine($"名字: {name}");
}

在这里插入图片描述

查询两个数据源

  • 学生类
class Student
{public string Name { get; set; }public int Id { get; set; }public string[] Favs { get; set; }public override string ToString(){return "姓名:" + Name + ",学号:" + Id;}
}
Student[] students = new Student[]{new Student { Name = "Alice", Id = 1, Favs = new string[] { "编程1", "Science" } },new Student { Name = "Bob", Id = 2, Favs = new string[] { "编程2", "Art1" , "Art1" } },new Student { Name = "Charlie", Id = 3, Favs = new string[] { "编程3", "Art2", "Art2" } }};//如果有多个数据源,一般后面的数据源可以使用前面的数据源,反过来不行var query = from s in students//第一个数据源where s.Name== "Bob"//对第一个数据源进行过滤from fav in s.Favs//第二个数据源where fav.Contains("编程")//对第二个数据源进行过滤select fav;//结果集foreach (var item in query){Console.WriteLine(item);}

在这里插入图片描述

LINQ 使用扩展方法

  int[] ints = { 1, 2, 3 };//Where(Func)相当于LINQ中where子句//OrderByDescending(Func)相当于LINQ中orderby descending//OrderBy(Func)相当于LINQ中orderby ascendingvar query1 = ints.Where(item => item >= 2).OrderByDescending(item => item).Select(item=>item);foreach (var item in query1){Console.WriteLine(item);}

在这里插入图片描述

关联查询

 var data6 = from c in CouseInfos  // 左表join a in Classinfos  // 右表on c.ClassId equals a.ClassId  // 关联条件into newList        // 生成关联结果from s in  newList  // 遍历关联结果中记录select new {           // 映射,将关联结果樱色到data6上className = s.ClassName,couse = c.CouseName};

// 左关联 以左表为主,右表中能匹配上的记录,显示对应信息,匹配不上,显示null

var data8 = from s in CouseInfos  // 左表join a in Classinfos  // 右边表on s.ClassId equals a.ClassId // 关联条件  equals 等于into cInfofrom s1 in cInfo.DefaultIfEmpty() // 如果序列为空显示默认值select new{CouseId = s.CouseIDn,CouseName = s.CouseName,classID = s.ClassId,className = s1 == null ?"null":s1.ClassName};

// 右关联,以右表格 为主,左表中能匹配上的记录,显示对应数据,无法匹配为 null

  var data9 = from s in Classinfos  // 左表join a in CouseInfos  // 右边表on s.ClassId equals a.ClassId // 关联条件  equals 等于into cInfofrom s1 in cInfo.DefaultIfEmpty() // 如果序列为空显示默认值select s1;

分页

// 跳过两个 选择5个

  var data11 = (from c in CouseInfos select c.CouseStu).Skip(2).Take(5);

LINQ实战用到的程序包管理器控制台命令
enable-migrations
add-migration InitDatabase
update-database
add-migration UpdateDataBase

http://www.lqws.cn/news/524557.html

相关文章:

  • Redis—持久化
  • 使用亮数据网页抓取API自动获取Tiktok数据
  • C++包管理工具:conan2使用教程
  • 网络安全技术期末考试
  • 专题:2025医疗AI应用研究报告|附200+份报告PDF汇总下载
  • 多个 Job 并发运行时共享配置文件导致上下文污染,固化 Jenkins Job 上下文
  • QUdpScoket 组播实现及其中的踩坑点记录
  • 【DevTools浏览器开发者工具反调试之无限Debugger跳过】
  • 如何防止自己的电脑被控制?开启二次验证保护教程
  • 强化学习理论基础:从Q-learning到PPO的算法演进(1)
  • [日志收集]
  • 刷题 | 牛客 - js中等题-下 (更ing)45/54知识点解答
  • 深度学习实战112-基于大模型Qwen+RAG+推荐算法的作业互评管理系统设计与实现
  • Java期末复习题(二)
  • 计算机网络-----详解HTTPS协议
  • 日本生活:日语语言学校-日语作文-沟通无国界(5)-题目:我的一天
  • C# 中 string.Equals 以及 StringComparison 枚举的不同选项
  • SQL进阶:CASE表达式
  • 数组基础知识
  • IBMS 智能化系统:让建筑提前进入 AIoT 智慧纪元​
  • Linux基本指令篇 —— mv指令
  • 时序数据库 TDengine 助力华锐 D5 平台实现“三连降”:查询快了,机器少了,成本也低了
  • 以太坊执行客户端和共识客户端各自的作用及意义
  • java 对接ETH(以太坊) 交易相关资料
  • 区间求最值问题高效解决方法
  • Linux下使用docker nginx部署vue前端项目工程
  • vue2 使用el-form中el-form-item单独绑定rules不生效问题
  • IoT/HCIP实验-5/基于NB-IoT的智慧农业实验(平台侧开发+端侧编码+基础调试分析)
  • LOOP如何让长周期交互LLM代理在复杂环境中实现突破?
  • 正则表达式匹配实现