LINQ基础之From和GroupBy子句
作者:農碼一生 发布时间:2023-06-09 02:46:29
标签:LINQ,From,GroupBy,子句
FROM子句
一、简单FROM子句
获取数据源:
var queryAllCustomers =
from cust in Customers
select cust;
分析:
查询表达式必须以from子句开头
例子中cust是范围变量,范围变量类似于foreach循环中的迭代变量,但在查询表达式中,实际上不发生迭代。执行查询时,范围变量将用作对Customers中的每个后续元素的引用。因为编译器可以推断cust的类型,所以不必显示指定此类型。
Customers是数据源,实现了IEnumerable或IEnumerable(T)或其派生接口的
二、复合FROM子句
查询出成绩有90分以上的学生,得到他们的名字和成绩
//数据源
IList<Student> students = new List<Student>
{
new Student{ Name="Kevin", Score=new List<int>{89,93,88,78}},
new Student{ Name="Jackie",Score=new List<int>{92,87,83,91}},
new Student{ Name="Helen",Score=new List<int>{53,76,72,62}}
};
//所有的Linq查询操作都由以下三个不同的操作组成:
//1.获得数据源
//2.创建查询
//3.执行查询
//使用复合from子句查询命令
var getStudent =
from student in students
from score in student.Score
where score > 90
select new { Name = student.Name, Score = score };
foreach (var st in getStudent)
{
Console.WriteLine("NAME:{0},SCORE:{1}",st.Name,st.Score);
}
分析:
我们可以看到学生对象中有个Score属性,Score属性本身就是List集合,这时候我们就要用到复合from子句进行查询了。首先遍历学生对象集合中的每个学生对象,然后在用另一个from子句,对每个学生对象中的Score属性进行遍历,筛选出含有90分以上的学生信息进行返回。
GroupBy子句
一、简介
group子句返回一个IGrouping(T Key,T element)对象序列,编译时,group子句被转换成对GroupBy方法的调用。
二、案例
案例一:
根据首字母分组,并打印到控制台
//数据源
string[] fruits = { "apple", "banana", "peach", "orange", "melon", "lemon" };
//分组查询的查询语句
var query = from f in fruits
group f by f[0];
//执行查询
foreach (var letters in query)
{
Console.WriteLine("words that start with letter:" + letters.Key);
foreach (var word in letters)
{
Console.WriteLine(word);
}
}
分析:
首先遍历字符串数组中的每个字符串,然后根据每个字符串的首字母进行分组,返回结果.
案例二:
var query = from f in fruits
group f by f[0] into g
where g.Key == 'p' || g.Key == 'b'
select g;
分析:
如果您想要对每个组执行附加查询操作,则可以使用into上下文关键字指定一个临时标识符。使用into时,必须继续编写该查询,并最终用一个select语句或另一个group子句结束该查询。
案例三:
string[] strs = { "胡广成", "张国荣", "刘德华", "故国冰封", "万里雪飘", "AAA", "胡翰轩", "张杰" };
var list5 = strs
//.Where(a => a.Length == 3)
.Select(item => item)
.GroupBy(item => item.Length);//分组 分组依据是字符串的长度
foreach (var item in list5)
{
Console.WriteLine("----------------");
Console.WriteLine($"分组字段是{item.Key}"); //item.Key是分组依据 显示分组字段
foreach (var items in item)//内层循环遍历分组项
{
Console.WriteLine(items);
}
}
分析:
按照名字的长度进行分组显示。
三、多字段分组示例
GroupBy(x => new { x.a , x.b, x.c }).Select( x=> ( new Class名 { a=x.Key.a , b=x.Key.b , c = x.Key.c } ))
来源:https://www.cnblogs.com/wml-it/p/14836544.html
0
投稿
猜你喜欢
- 在我们工作中涉及到一些场景需要我们配置多数据源的操作,之前来说我们配置数据源需要写繁琐的配置类来配置我们的数据源,哪个是默认数据源等等,而现
- 目录一、Java 类加载过程1、字节码编译2、加载3、连接4、初始化总结一、Java 类加载过程1、字节码编译编写好 Java 源码 Stu
- 一、简介JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCa
- Shiro介绍Shiro是一款安全框架,主要的三个类Subject、SecurityManager、RealmSubject:表示当前用户S
- SpringBoot版本:2.3.2.RELEASESpringBoot Data JPA版本:2.3.2.RELEASEJpaReposi
- springboot集成mybatis plus和dynamic-datasource注意事项环境spring-boot-starter-p
- 字符串操作在任意编程语言的日常编程中都随处可见,今天来汇总一下 C# 中关于字符串的一些你可能遗忘或遗漏的知识点。逐字字符串在普通字符串中,
- 前言:封装、继承和多态是面向对象编程的三大特征。1.封装1.1.封装概念封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据
- 1. 使用try-with-resources简化文件读取操作:修改前:FileInputStream fis = null;try { &
- 1、安装依赖<dependency> <
- 前言本文主要介绍其具体的实现思路(视频仅有代码输入,并无过程介绍等),同时,在原本实现的基础上,进行了多处修改和优化,具体参见下面的内容。优
- 本文实例讲述了Java使用Jdbc连接Oracle执行简单查询操作。分享给大家供大家参考,具体如下:Java Jdbc 连接 Oracle
- 我在5月份的时候就申请了洞态IAST企业版内测,算是比较早的一批用户了。聊聊几个我比较在意的问题,比如API接口覆盖率、第三方开源组件检测以
- 一:父级pom.xml文件 resources目录下新建指定文件夹,存放Spring配置文件<profiles> &
- 原因:给定的流不支持mark和reset就会报这个错误。获取到一个网络流,这个网络流不允许读写头来回移动,也就不允许mark/reset机制
- 引言最近,各大平台都新增了评论区显示发言者ip归属地的功能,例如哔哩哔哩,微博,知乎等等。Java 中是如何获取 IP&
- 定义弱引用是使用WeakReference创建的引用,弱引用也是用来描述非必需对象的,它是比软引用更弱的引用类型。在发生GC时,只要发现弱引
- * 是许多框架底层实现的基础,比如Spirng的AOP等,其实弄清楚了 * 的实现原理,它就没那么神奇了,下面就来通过案例和分析JDK
- JavaFX主要致力于富客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio,video,graphic,ani
- 以前用序列化都是一些方法需要才实现的,后来业务需求要深拷贝才去研究。参阅了别人博客得出一些总结。序列化是为了把Java对象转化为字节序列(字