C# LINQ 表达式 ,查询, 筛选
语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic
和可能的任何其他 .NET 语言)的基础上。 借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。
对于编写查询的开发人员来说,LINQ 最明显的“语言集成”部分是查询表达式。
查询表达式是使用 C# 3.0 中引入的声明性查询语法编写的。
通过使用查询语法,您甚至可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。
您使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO.NET 数据集、XML 文档和流以及 .NET 集合中的数据。
LINQ的基本格式如下所示:
var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式>
group分组子句
语句格式:var str = from p in PersonList group p by p.age
group子句将数据源中的数据进行分组,在遍历数据元素时,并不像前面的章节那样直接对元素进行遍历,因为group子句返回的是元素类型为IGrouping<TKey,TElement>的对象序列,必须在循环中嵌套一个对象的循环才能够查询相应的数据元素。
在使用group子句时,LINQ查询子句的末尾并没有select子句,因为group子句会返回一个对象序列,通过循环遍历才能够在对象序列中寻找到相应的对象的元素,如果使用group子句进行分组操作,可以不使用select子句。
orderby排序子句
语句格式:var str = from p in PersonList orderby p.age select p;
orderby子句中使用descending关键字进行倒序排列
示例代码如下:
var str = from p in PersonList orderby p.age descending select p;
orderby子句同样能够进行多个条件排序,只需要将这些条件用“,”号分割即可
示例代码如下:
var str = from p in PersonList orderby p.age descending,p.name select p;
join连接子句
在LINQ中同样也可以使用join子句对有关系的数据源或数据对象进行查询,但首先这两个数据源必须要有一定的联系
var str = from p in PersonList join car in CarList on p.cid equals car.cid select p;
1,数组 或者list的筛选
public int[] scores = { 90, 92, 42, 100,46, 37, 32,70, 74, 5, 16, 32 };
IEnumerable<int> scoreQuery =
from score in scores //必须
where score > 40 //可选条件 筛选 分数大于 40
orderby score descending //可选条件
select score; //必须
foreach (int score in scoreQuery)
{
richTextBox_after.AppendText(score.ToString());
richTextBox_after.AppendText("\r\n");
}
int hightestScore = scores.Max();
richTextBox_after.AppendText("最大值:" + hightestScore.ToString());
2,字典 筛选
public Dictionary<string, int> stutents = new Dictionary<string, int>()
{
{"lisi",12 },
{"zhansan",20 },
{"wangwu",90 },
{"laowang",35 }
};
var age = from student in stutents
where student.Value > 30 //查找值大于 30 的
orderby student.Value ascending //升序
select student.Value; //选择 value
var list = age.ToList<int>(); //转为 list类型
foreach (var student in list)
{
richTextBox_after.AppendText(student.ToString());
richTextBox_after.AppendText("\r\n");
}
3,类,对象 筛选
public class Animal
{
public string ID;
public string type;
public string area;
public string name;
public int age;
public string sex;
public string ToString()
{
return $"ID :{ID} type:{type} area:{area} name:{name} age:{age} sex:{sex}";
}
}
private List<Animal> _monkey;
_monkey = new List<Animal>();
Animal m1 = new Animal()
{
ID = "1001",
type = "金丝猴",
area = "云南",
name = "小金",
age = 8,
sex = "male"
};
Animal m2 = new Animal()
{
ID = "1002",
type = "黒叶猴",
area = "贵州",
name = "小黑",
age = 2,
sex = "woman"
};
Animal m3 = new Animal()
{
ID = "1003",
type = "猩猩",
area = "非洲",
name = "小猩",
age = 12,
sex = "woman"
};
Animal m4 = new Animal()
{
ID = "1004",
type = "狒狒",
area = "南美",
name = "小狒",
age = 15,
sex = "man"
};
Animal m5 = new Animal()
{
ID = "1005",
type = "飞猴",
area = "广西",
name = "小飞",
age = 6,
sex = "man"
};
_monkey.Add(m1);
_monkey.Add(m2);
_monkey.Add(m3);
_monkey.Add(m4);
_monkey.Add(m5);
var seletData = from monkey in _monkey
where monkey.age > 5 //选择年龄大于 5 的 monkey
orderby monkey.age descending //年龄降序
select monkey;
var list = seletData.ToList<Animal>();
foreach (var animal in list)
{
richTextBox_after.AppendText(animal.ToString());
richTextBox_after.AppendText("\r\n");
}
C# LINQ 表达式 ,查询, 筛选相关推荐
- NHibernate3剖析:Query篇之NHibernate.Linq标准查询
本节内容 系列引入 NHibernate.Linq概述 标准查询运算符 结语 系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Sessi ...
- 一起谈.NET技术,NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...
- NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...
- 动态构建LINQ表达式
目录 基础 挑战 解决方案:动态表达式 Transaction介绍 参数表达式 逻辑表达式 属性表达式 常量和调用表达式 比较表达式 Lambda表达式和编译 从内存到数据库 结论 LINQ意为语言集 ...
- 【More Effective C#】LINQ表达式与方法调用的映射
LINQ构建在两个概念之上,一种查询语言和一系列将查询语言转换成方法调用的实现.在编译时,编译器将LINQ表达式(LINQ to object)转换成方法调用. .Net基础类库提供了两种扩展方法.S ...
- Linq表达式、Lambda表达式你更喜欢哪个?
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
- LINQ 的查询执行何时是延迟执行,何时是立即执行,以及查询的复用
延迟执行的经典例子: 我们用 select ++i 就可以看到在foreach 时候,查询才被执行. public static void Linq99() { int[] numbers = ...
- LINQ表达式用法整理
收集一些Linq表达式中的一些比较常用的写法,希望能给大家工作当中带来一些便利. 1. Where子句条件过滤结果集型(集合数据使用这种,譬如数组.列表数据,同样适用于Datatable等多列数据集) ...
- 深入LINQ | 动态构建LINQ表达式
原文:bit.ly/3fwlKQJ 作者:Jeremy Likness 译者:精致码农-王亮 LINQ 是 Language Integrated Query(语言集成查询)的缩写,是我最喜欢的 .N ...
最新文章
- 施一公:大学必须不计成败、不论得失地为探索者提供宽容和支持的环境
- Inverse Pair
- html表单复选框样式,美化表单——自定义checkbox和radio样式
- 利用JAVA计算TFIDF和Cosine相似度-学习版本
- android渐变效果
- 阶段3 2.Spring_06.Spring的新注解_6 Qualifier注解的另一种用法
- shp地图如何导入奥维地图手机_奥维地图如何导入文件 奥维地图导出文件在哪...
- matplotlib-19 堆积图
- 极客日报:微信自动抢红包软件被判赔 475 万;日本科学家打破网速全球纪录;JavaScript蝉联最受欢迎编程语言
- centos6下安装配置NFS
- 前端初学,记下标签以后参考
- 错误: 日期/时间值超出范围
- C语言随机比大小循环,C语言基础知识之(三):循环、随机数
- iOS开发钥匙串保存信息
- 腾讯云CDB/CynosDB技术揭秘
- 关于计算机的知识和发明家,计算机历史发展历程中国历史上最牛的三大发明家是谁?...
- vivoS7e和OPPOReno4SE哪个更好
- PDManer[元数建模]-v4.1.0发布:一款简单好用的数据库建模平台
- MATLAB学习笔记 实现超简单对对碰游戏
- 基于SpringBoot+Vue在线考试系统【web端+小程序端】【附带源码】
热门文章
- S3C6410裸机电阻屏驱动
- 小蜜蜂采集器 怎么用
- 测试管理之--团队管理和建设
- [附源码]SSM计算机毕业设计网上宠物商店JAVA
- 计算机图形学基础教程(Visual C++版)习题解答与编程实践(第2版)孔令德1-到第3章的直线扫描转换
- [转载]chrome中非https无法打开摄像头
- 转换成大写日期(中文)
- DHE, 二氢乙锭|一种超氧化物阴离子探针|cas104821-25-2的溶解度,各种别称和操作使用说明
- 支付宝统一下单支付接口(适用于H5、PC、APP)
- 分治法-----找最大值与最小值