.NET基础学习(LINQ)

linq语句中多个记录合成一条记录 小菜先说一下环境应用,在福分系统中每天都有加分的记录,并且每次加分的分值是不同的。现在有一个这样的需求就是按照一定的时间段,求出某个人的所加的分值。并且按照分值排名。          该怎么着手呢?先求出这段时间的所有的记录,这个比较简单。难的地方在,这怎么通过人名(id),得到特定人的几条记录,然后得到总分,并且是不定向的几个人。          想不到linq语句很强大,它封装了这样的 阅读详情

转:http://www.cnblogs.com/cmsdn/archive/2012/04/12/2442107.html

 

什么是LINQ

  • LINQ(发音为link)代表语言集成查询(Language Integrated Query)
  • 详细见LINQ

匿名类型

第一个成员初始化器是赋值形式,第二个是成员访问表达式,第三个是标示符形式,如下实例所示:

1 string Sex = "男";
2 var person = new { Age = 24, SimpleClass.Name, Sex };
3 Console.WriteLine("{0},Sex{1},Age {2}",person.Name,person.Sex,person.Age);

运行结果:

注意标示符形式和访问表达式必须定义在匿名类型申明之前,Sex是一个局部变量,Name是类SimpleClass的静态字段。

尽管在代码中看不到匿名类型,对象浏览器却能看到。如果编译器遇到了另一个具有相同参数名、相同引用类型名和相同顺序的匿名类型,它会重用这个类型并直接创建新的实例,而不会创建新的匿名类型。

查询语法和方法语法

  • 查询语法(query syntax)是声明形式的,看上去和SQL的语句很相似。查询语法使用查询表达式书写。
  • 方法语法(method syntax)是命令形式,它的使用是标准的方法调用。方法是一组叫做标准查询运算符的方法。
  • 在一个查询中也可以组合以上两种形式。

示例代码如下所示:

复制代码
 1 var query1 = from n in Enumerable.Range(1, 10)
 2 where n < 8
 3 select n;
 4 Console.Write("查询语法得到结果:");
 5 foreach (var v in query1) Console.Write("{0}\t",v);
 6
 7 var query2 = Enumerable.Range(1, 8).Where(n => n < 8);
 8 Console.WriteLine("");
 9 Console.Write("方法语法得到结果:");
10 foreach (var v in query2) Console.Write("{0}\t", v);
11
12 int count = (from n in Enumerable.Range(1, 10)
13 where n < 8
14 select n).Count();
15 Console.WriteLine("");
16 Console.WriteLine("两种方式的组合:{0}", count);
复制代码

运行结果:

查询表达式的结构

1、from子句

  • from子句指定了要作为数据源使用的数据集合。它也引入了迭代变量,迭代变量有序表示数据源的每一个元素。
复制代码
1 int[] arr = { 1, 5, 9, 8, 45, 23, 26, 14, 7, 8, 9 };
2 var query = from n in arr //(n->迭代变量)
3 where n < 10 //使用迭代变量
4 select n; //使用迭代变量
5 foreach (var v in query) Console.Write("{0}\t",v);
6 Console.WriteLine("");
复制代码

运行结果:

2、join子句

  • LINQ中的join子句和SQL中的join很相似,连接操作接受两个集合然后创建一个临时的对象集合,每个对象包含原始集合对象中的所有字段,使用连接来结合两个或更多个集合中的数据。

示例代码如下:

复制代码
 1 public class Student
 2  {
 3 public int StID;
 4 public string LastName;
 5  }
 6 public class CourseStudent
 7  {
 8 public string CourseName;
 9 public int StID;
10  }
11
12 CourseStudent[] studentInCourses = new CourseStudent[]{
13 new CourseStudent{CourseName="Art",StID=1},
14 new CourseStudent{CourseName="Art",StID=3},
15 new CourseStudent{CourseName="History",StID=1},
16 new CourseStudent{CourseName="History",StID=2},
17 new CourseStudent{CourseName="Physics",StID=3}
18  };
19 Student[] students = new Student[] {
20 new Student{StID=1,LastName="张三"},
21 new Student{StID=2,LastName="李四"},
22 new Student{StID=3,LastName="王五"}
23  };
24
25 //获取选修2门课以上同学的名字
26 var query = (from s in students
27 join c in studentInCourses on s.StID equals c.StID
28 where (from x in studentInCourses where x.StID==c.StID select x.StID).Count()>1
29 select s.LastName).Distinct();
30 foreach (var v in query) Console.Write("{0}\t",v);
31 Console.WriteLine("");
32 //获取选修历史同学的名字
33 var query1 = from s in students
34 join c in studentInCourses on s.StID equals c.StID
35 where c.CourseName == "History"
36 select s.LastName;
37 foreach (var v in query1) Console.Write("{0}\t", v);
复制代码

运行结果:

查询主体中的from...let...where片段

  • 可选的from...let...where部分是查询主体的第一部分,可以由任意数量的3个子句来组合--from子句、let子句和where子句。

1、from子句

  • 查询表达式必须从from子句开始,后面跟的是查询主体。主体本身可以从任何数量的其他from子句开始,每一个from子句都指定了一个额外的数据源集合并引入了要在之后运算的迭代变量,所有from子句的语法和含义都是一样的。

示例代码如下:

1 var someInts = from a in Enumerable.Range(1, 5) //必须的第一个from子句
2 from b in Enumerable.Range(6, 5) //查询主体的第一个子句
3 where a < 3 && b < 10
4 select new { a, b, sum = a + b }; //匿名类型对象
5 foreach (var v in someInts) Console.WriteLine(v);

 2、let子句

  • let子句接受一个表达式的运算并把它赋值给一个需要在其他运算中使用的标示符。

示例代码如下:

复制代码
1 var someInts = from a in Enumerable.Range(1, 5)
2 from b in Enumerable.Range(6, 5)
3 let sum = a + b //在新的变量中保存结果
4 where sum == 12
5 select new { a, b, sum };
6 foreach (var v in someInts) Console.WriteLine(v);
复制代码

运行结果:

3、where子句

  • where子句根据之后的运算来去除不符合指定条件的项。

示例代码如下:

复制代码
1 var someInts = from a in Enumerable.Range(1, 5)
2 from b in Enumerable.Range(6, 5)
3 let sum = a + b
4 where sum > 12 //条件一
5 where a==4 //条件二
6 select new { a, b, sum };
7 foreach (var v in someInts) Console.WriteLine(v);
复制代码

运行结果:

orderby子句

  • orderby子句接受一个表达式并根据表达式依次返回结果项,orderby子句的默认排序是升序,然而我们可以使用ascending和descending关键词显示第设置元素排序为升序或降序,ordery可以有任意多个子句,它们必须用逗号隔开。

示例代码如下:

复制代码
 1 var persons = new[] { //匿名类型的对象数组
 2 new {Name="张三",Sex="男",Age=32,Address="广东深圳"},
 3 new {Name="李四",Sex="男",Age=26,Address="广东广州"},
 4 new {Name="王五",Sex="女",Age=22,Address="广东深圳"},
 5 new {Name="赵六",Sex="男",Age=33,Address="广东东莞"}
 6  };
 7 var query = from p in persons
 8 orderby p.Age
 9 select p;
10 foreach (var p in query) Console.WriteLine("Name:{0},Sex:{1},Age:{2},Address:{3}", p.Name, p.Sex, p.Age, p.Address);
复制代码

运行结果:

group by子句

  • group子句把select的对象根据一些标准进行分组。例如,有了前面示例人的数组,程序可以根据它们的所在地进行分组。
  • group by如果项包含在查询结果中,它们就可以根据某个字段的值进行分组。作为分组依据的项叫做键(key);和select子句不同,group子句不从原始的数据源中返回可枚举的可枚举类型,而是返回以枚举已经形成的项的分组的可枚举类型;分组本身是可枚举类型,它们可枚举实际的项。

示例代码如下:

复制代码
 1 var persons = new[] { //匿名类型的对象数组
 2 new {Name="张三",Sex="男",Age=32,Address="广东深圳"},
 3 new {Name="李四",Sex="男",Age=26,Address="广东广州"},
 4 new {Name="王五",Sex="女",Age=22,Address="广东深圳"},
 5 new {Name="赵六",Sex="男",Age=33,Address="广东东莞"}
 6  };
 7 var query = from p in persons
 8  group p by p.Address;
 9 foreach (var v in query) //枚举分组
10  {
11 Console.WriteLine("{0}",v.Key); //分组键
12 foreach (var t in v) //枚举分组中的项
13  {
14 Console.WriteLine("Name:{0},Sex:{1},Age:{2},Address:{3}", t.Name, t.Sex, t.Age, t.Address);
15  }
16 }
复制代码

运行结果:

查询延续

  • 查询延续子句可以接受查询的一部分结果并赋予一个名字,从而可以查询的另一部分中使用。

示例代码如下:

复制代码
1 var somInts = from a in Enumerable.Range(1, 10)
2 join b in Enumerable.Range(5, 10) on a equals b
3 into groupTemp //查询延续
4 from c in groupTemp
5 select c;
6 foreach (var v in somInts) Console.WriteLine(v);
复制代码

运行结果如下:

使用委托参数和Lambda的示例

public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

示例代码如下:

复制代码
1 IList<int> list = Enumerable.Range(1, 100).ToList();
2 Func<int, bool> myDel = delegate(int x) { return x % 2 == 1; };//委托匿名方法
3 var countOdd1 = list.Count(myDel);//调用委托
4 var countOdd2 = list.Count(x => x % 2 == 1);//Lambda表达式
5 Console.WriteLine("委托参数得到奇数的个数:{0}",countOdd1);
6 Console.WriteLine("Lambda得到奇数的个数:{0}", countOdd2);
复制代码

 

运行结果:

 版权所有,转载请注明出处!

 

Dify工作流教程|以抓取网页并更新知识库为例详细讲解工作流编排过程(附DSL文件) {"name": "{新建的title变量}","text": "新建的content变量","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}有没有很痛苦,明明添加书签的网页,当你想阅读的时候,总是找不到或者好不容易找到了,发现网页404了。如果有个小工具,直接能把你输入的链接内容抓取下来,并且加入到你的知识库中,你说他香不香。无法获取授权的,也可以使用网页抓取工具,这个是免费的,抓取效果也可以。 阅读详情

相关推荐

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

.NET深入解析LINQ框架(二:LINQ优雅的前奏)

阅读目录: 1.LINQ框架的主要设计模型 1.1.链式设计模式 (以流水线般的链接方式设计系统逻辑) 1.2.链式查询方法(逐步加工查询表达式中的每一个工作点) 2.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) 2.3.深入IEnumerab...

dengzai7446的博客 242

【QMIX】一种基于Value-Based多智能体算法

文章目录1. QMIX 解决了什么问题(Motivation)2. QMIX 怎样解决团队收益最大化问题(Method)2.1 算法大框架 —— 基于 AC 框架的 CTDE(Centralized Training Distributed Execution) 模式 QMIX 是一种基于 Value-Based 的多智能体强化学习算法(MARL),其基本思想来源于 Actor-Critic 与 DQN 的结合。使用中心式学习(Centralized Learning)分布式执行(Distributed

qq_38638132的博客 9860

LINQ

LINQ,语言级集成查询(Language INtegrated Query) 经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,...

weixin_34175509的博客 294

基于python获取网易云热门歌单及封面

先看一下图片背后的代码 非常好,里面歌单名字,id,以及封面图片都有了.在复制url的时候注意把/#删掉,要不然爬不了. import requests from lxml import etree url='https://music.163.com/discover/playlist' head={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch

ziyuan12345678的博客 536

【TouchDesigner】三维渲染

Cmera COMP Uniform Scale(按比例缩放):沿x,y,z三个轴等比例缩放相机(通常不建议改变相机大小)。 Constrain To(约束到):让相机附属到某个指定元件上,跟随指定元件运动。 Look At(朝向):让相机在移动过程中始终面对指定的元件。 Pah SOP(相机的路径):输入SOP元件名字,为相机指定移动路径。 Geometry Comp Geometry COMP中的参数与Camera COMP中的参数用法大部分都相似。特殊的是它的instacne页面的

wangpuqing1997的博客 5459

.NET学习路线总结之LINQ查询

学好一门语言需要坚持不懈的毅力,还需要较全的学习路线,由于技术较多分为多个模块。此博客是本人在空闲时间查阅整理,本博客是LINQ查询的模块,希望对你的学习有所帮助!后续持续更新其他模块技术要点

dust__的博客 963

22、自动化地图制作与Pandas数据处理

本文介绍了在ArcGIS Pro中使用arcpy.mp模块进行自动化地图制作的关键技术,涵盖地图元素的访问、移动与文本修改,以及将布局批量导出为JPEG、PNG和PDF格式的方法。同时,文章深入探讨了Pandas在数据处理和地理空间分析中的应用,特别是Spatially Enabled DataFrames(SEDFs)的使用。通过综合案例展示了地图更新与数据清洗、分析的结合,提升了地图制作与数据处理的效率,为GIS自动化工作流提供了实用指南。

w8x9y0z1的博客 78

.NET技术学习——LINQ

1.LINQ 概述 LINQ(Language-Integrated Query,语言集成查询)是微软在.NET Framework 3.5版本引入的新功能,它能够将查询功能直接引入.Net Framework所支持的编程语言中。 如图所示,LINQ主要由LINQ to Objects、LINQ to ADO.NET、LINQ to XML三部分组成。其中: LINQ to Objects:可以查询是实现了Ienumerable或Ienumerable<T>的集合,即任意可枚举的集合。 ..

victorzhangwt的博客 7731

Python控制Keysight DAQ973A/DAQ970A实现数据采集

本文介绍了如何通过编程实现Keysight DAQ973A数据采集系统的自动化温度测量。首先,通过GPIB线将PC与仪器连接,并使用热电耦测量线连接被测装置。接着,通过查阅Keysight官网提供的编程手册,获取了实现温度测量所需的SCPI指令。然后,使用pyvisa库编写代码,与仪器进行交互,发送SCPI指令并读取测量结果。代码中整合了配置和查询指令,并将测量结果转换为浮点数格式。最后,将整个流程封装为命令行工具,用户可以通过配置文件设置参数,并执行自动化测试,测试结果将保存为CSV文件。整个过程实现了温

xgh1951的博客 1885

RAG 实战:LangChain + 向量数据库构建知识问答系统

从文档加载、分割、嵌入到检索增强生成,完整实现一个基于本地文档的知识问答系统。

kaixin110a的博客 187

.Net Core 之LINQ学习二

是方法的。

qq_18519869的博客 1096

基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

amy_mhd的博客 162

.Net Core 学习:LINQ 详解

LINQ(Language Integrated Query,语言集成查询),C# 的声明式查询语言,是 C# 最具革命性的特性之一。它让你可以用类似 SQL 的语法来查询任何数据源,而不仅仅是数据库。

van的博客 468

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

学习 :ASP.NET中使用LINQ

第0步:建立一个C# LINQ ASP.NET网站 建立一个能使用LINQ/DLINQ/XLINQ和新的C#3.0语言特性的ASP.NET网站,在VS中选择文件->新建网站然后选 择"LINQ ASP.NET Web Site Template":   默认会创建一个如下所示的网站 工程:     注意它在/bin文件夹中引入了一些LINQ程序集。它同样

一等一 的专栏 1263

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

从今天开始回归Linq和.NET3.5和学习!

从今天开始回归Linq和.NET3.5和学习! 前些日子参加公司的编程比赛,把Linq和.NET 3.5拉下了.现在得捡回来了.把最近做的项目试着用Linq开发,看看有没有问题. 以后新项目尽量用VS2008开发,咱也得赶上潮流才行.不过其他人不知道能不能跟上. ...

alieen_941124的博客 70

最佳ASP.net之LINQ学习资料

在使用LINQ过程中偶然有点心得想记录下来,没想到查阅到一个非常好的网站,直接转载了。1. 【推荐】LINQ系列文章,适合按部就班学习或查阅http://kb.cnblogs.com/page/42465/本系列文章导航LINQ to SQL语句(1)之WhereLINQ to SQL语句(2)之Select/DistinctLINQ to SQL语句(3)之Count/Sum/Min...

weixin_30736301的博客 173

.NET学习笔记3——linq的语法

protected void Page_Load(object sender, EventArgs e)         {             //声明强类型DataClasses1DataContext的对象dc             DataClasses1DataContext dc = new DataClasses1DataContext();             i

Fiocca的专栏 642

ASP.NET EF 使用LinqPad 快速学习Linq

使用LinqPad这个工具可以很快学习并掌握linq[Language Integrated Query] linqPad官方下载地址:http://www.linqpad.net/ linqPad4百度云下载(for .NET Framework4.0/4.5):链接:http://pan.baidu.com/s/1gflmRDp 密码:3n3f linqPad5百度云下载(f...

angnienong7638的博客 245

Linq学习笔记(杨中科.net core 教程笔记)

/Where 筛选符合条件的对象​//Count 统计符合条件的数量​//Any 确认是否有一条数据符合条件bool isRight = employees.Any(t => t.Name == "张三");两种写法​​​排序//根据年龄排序​//根据年龄排序(倒序)​//根据名字首字符​//随机排序//先根据年龄排序,再根据薪资排序主要用来写分页查询//跳过3条数据取2条//返回最大年龄。

m0_72613306的博客 783

.Net学习——Linq常用拓展方法使用

本文主要演示Linq常用拓展方法。包括Where(),Single(),SingleOrDefault(),First(),学会并掌握常用的Linq常用拓展方法,可以更快的处理数据源,语法逻辑与SQL类似。

contact97的博客 1447
上一篇: sql转换数据类型用到的函数
下一篇: 拉姆达表达式学习(1)
cg_program
博客等级 码龄19年 245粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值