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


猜你喜欢
- spring boot版本和spring cloud版本框架版本SpringBoot2.3.12.RELEASESpringCloudHox
- ////////////////////////////
- 本文实例为大家分享了C#实现PC蓝牙通信代码,供大家参考,具体内容如下添加引用InTheHand.Net.Personal.dll首先创建一
- 本文实例讲述了C#判断当前程序是否通过管理员运行的方法。分享给大家供大家参考。具体实现代码如下:public bool IsAdminist
- 这篇文章主要介绍了Spring boot @RequestBody数据传递过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有
- java数据类型与二进制详细介绍在java中Int 类型的变量占 4个字节Long 类型的变量占8个字节一个程序就是一个世界,变量是这个程序
- 概述:@Valid是使用Hibernate validation的时候使用@Validated是只用Spring Validator校验机制
- 本文实例讲述了Android编程使WebView支持HTML5 Video全屏播放的解决方法。分享给大家供大家参考,具体如下:1)需要在An
- 序言springboot框架价值,可以简单快速的构建独立的spring生产级别应用。springboot主要有以下的特性:1.创建独立的Sp
- 本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法。分享给大家供大家参考。具体分析如下:微信服务器在5秒内收不到响应会断掉连接,
- ??Chip监听选中状态的监听:setOnCheckedChangeListener,该监听只有设置了checkable 属性为true或者
- 前言锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。
- 本文实例讲述了C#实现将字符串转换成日期格式的方法。分享给大家供大家参考。具体实现方法如下:string s = "2012011
- 显示一个计时器开始计时,当计时器到达15s的时候,停止计时。此时页面多一个重置按钮,可再次进行计时。页面布局<LinearLayout
- Crypto 库是C/C++的加密算法库,这个加密库很流行,基本上涵盖了市面上的各类加密解密算法,以下代码是我在学习是总结的,放到这里用于后
- 前序格式<meta-data android:name="weather" android:value="
- 一、 看效果二、上代码package com.framework.widget;import android.app.Activity;im
- springboot就是简化Spring应用中的初始化配置,快速创建项目而生的。创建springboot项目代开idea,点击File—&g
- 目录图像修复API操作效果源码图像修复实际应用中,图像常常容易受损,如存在污渍的镜头、旧照片的划痕、人为的涂画(比如马赛克),亦或是图像本身
- 模块调用之后,记录模块的相关日志,看似简单,其实暗藏玄机。1.简述模块日志的实现方式大致有三种:AOP + 自定义注解实现输出指定格式日志