Linq的一些基础查询
其中包括对数据中常用的条件查询,投影,分区,排序,分组,集合,元素,量词,和集集等标准查询操作符进行分类介绍
一.条件操作符
条件操作符where类似于SQL中的where子句,用于实现条件查询。下列扩张方法表达式查询满足条件“角色不能为null”的用户集合;
var user = db.Users.Where(o => o.Roles != null);
=====>
var users=from 0 in db.Users
where o.Roles != null
select o;
二.投影操作符
投影操作符Select 类似于SQL中的Select子句,将对象投影为一个匿名实例,用于控制制定查询迭代器显示或者处理的对象属性。另外,需要注意的是,扩展方法表达式中的Select操作符并非必要的,省略模式下,会返回完整的被投影对象。下列扩展方法表达式将用户的账号和密码信息投影为一个匿名类型:
var users=db.Users.Select(o=>new{ o.Account,o.Password});
=======>
var users=from o in db.Users
select new {o.Account,o.Password};
三.分区操作符
分区操作符实现对象的分区操作,其中,Take操作符类似于SQL中的Top操作符,下列扩展方法表达式返回前5个用户对象:
var users=db.Users.OrderBy(o=>o.Roles.Count).Take(5);
Skip操作符用于跳过指定个数对象并防护序列中的剩余对象,下列扩展方法表达式返回除前10个用户外的剩余用户:
var users=db.Users.OrderBy(o=>o.Roles.Count).Skip(10);
TakeWhile 操作符用于返回条件表达式值为真时的相邻元素集合, 下列扩展方法表达式返回第一个拥有 3 个角色的用户之前的所有用户集合:
var users = db.Users.OrderBy(o => o.Roles.Count).TakeWhile(o => o.Roles.Count == 3);
SkipWhile 操作符用于跳过条件表达式值为真时的元素,并返回剩下的元素集合,下列扩展方法表达式返回第一个拥有 3 个角色的用户之后的所有用户集合:
var users = db.Users.OrderBy(o => o.Roles.Count).SkipWhile(o => o.Roles == 3);
四.排序操作符
排序操作符实现对象的排序功能,包括 OrderBy、OrderByDescending、ThenBy、ThenByDescending 和 Reverse 五个操作符。其中 OrderBy 操作符实现对象的升序排列,相当于 SQL 中的 ORDER BY ASC 子句,下列扩展方法表达式实现用户按拥有的角色数进行升序排列:
var users = db.Users.OrderBy(o => o.Roles.Count);
对应的标准查询操作符表达式为:
var users = from o in db.Users
orderby o.Roles.Count
select o;
OrderByDescending 操作符实现对象的降序排列, 相当于 SQL中的 ORDER BY DESC子句,下列扩展方法表达式实现用户按拥有的角色数进行降序排列:
var users = db.Users.OrderByDescending(o => o.Roles.Count);
对应的标准查询操作符表达式为:
var users = from o in db.Users
orderby o.Roles.Count descending
select o;
ThenBy、ThenByDescending 和 Reverse 操作符只能针对 IOrderedEnumerable 接口对象使用,所以一般紧跟在 OrderBy/OrderByDesending 操作符方法后使用。ThenBy 操作符由编译器翻译为对 OrderBy 操作符的再次调用;ThenByDescending 操作符由编译器翻译为对 OrderByDescending 操作符的再次调用;Reverse 操作符实现对象的排序反向。这里不再一一举例。
五.分组操作符
分组操作符 GroupBy 类似于 SQL 中的 GROUP BY 子句,实现对象的分组操作。下列扩展方法表达式实现用户对象按拥有的角色数量进行分组:
var users = db.Users.GroupBy(o => o.Roles.Count);
对应的标准查询操作符表达式为:
var users = from o in db.Users
group o by o.Roles.Count into g
select new { RoleCount = g.Key, Group = g };
六、集合操作符
集合操作符包括 Distinct、Union、intersect 和 Except 四个操作符,除 Distinct 外,其他三个操作符都可将两个序列组合成一个序列。 Distinct 操作符类似于 SQL 中的 DISTINCT关键字, 用于删除序列中具有重复值的对象。 下列扩展方法表达式实现将用户角色中的重复角色删除功能:
var roles = user.Roles.Distinct();
Union 操作符类似于 SQL 中的 UNION 关键字,用于求具有同样结构的两个序列的并集。下列扩展方法表达式实现将用户 1 和用户 2 所拥有的角色组合成一个角色集合,并排除其中重复的角色:
var roles = user1.Roles.Union(user2.Roles);
Intersect 操作符类似于 SQL 中的 INTERSECT 关键字, 用于求具有同样结构的两个序列的交集。下列扩展方法表达式返回用户 1 和用户 2 都具有的角色集合:
var roles = user1.Roles.Intersect(user2.Roles);
Except 操作符类似于 SQL 中的 EXCEPT 关键字,用于返回第一个序列中有、但第二个序列中没有的对象集合。下列扩展方法表达式返回用户 1 拥有,而用户 2 没有的角色集合:
var roles = user1.Roles.Except(user2.Roles);
七.元素操作符
元素操作符包括两组操作符,分别是用于从一个 IEnumerable<T>序列中返回满足条件的单个对象或无满足条件对象时抛异常的 First、Last 和 Single 操作符,以及返回满足条件的单个对象或无满足条件对象时返回空对象的 FirstOrDefault、LastOrDefault 和SingleOrDefault 操作符。其中 First 和 FirstOrDefault 操作符用于返回第一个满足条件的对象。下列扩展方法表达式返回第一个拥有三个角色的用户
var user = db.Users.FirstOrDefault(o => o.Roles.Count == 3);
Last 和 LastOrDefault 操作符用于返回最后一个满足条件的对象。 下列扩展方法表达式返回最后一个拥有三个角色的用户:
var user = db.Users.LastOrDefault(o => o.Roles.Count == 3);
Single 和 SingleOrDefault 操作符用于返回满足条件的序列中的唯一元素,如果序列中包含不止一个元素,将会抛异常。下列扩展方法表达式返回帐号为“Apollo”的唯一用户,如果有多个用户帐号都为“Apollo” ,则抛异常:
var user = db.Users.SingleOrDefault(o => o.Account == "Apollo");
八.量词操作符
量词操作符包括 Any、All 和 Contains 三个操作符,用于检查序列中是否有一些对象或所有对象满足条件。其中,Any 操作符用于检查序列中是否有任何一个对象满足条件。下列扩展方法表达式当有任何一个用户拥有三个角色时返回真,否则返回假:
var result = db.Users.Any(o => o.Roles.Count == 3);
All 操作符用于检查序列中是否所有对象均满足条件。下列扩展方法表达式当所有用户均拥有三个角色时返回真,否则返回假:
var result = db.Users.All(o => o.Roles.Count == 3);
Contains 操作符用于检查序列中是否包含指定的对象。下列扩展方法表达式当集合中包含用户 1 则返回真,否则返回假:
var result = db.Users.Where(o => o.Roles.Count == 3).Contains(user1);
九.聚集操作符
聚集操作符包括 Count、Min、Max、Sum 和 Average 等多个操作符,用于对对象集合进行统计计算。其中,Count 操作符类似于 SQL 中的 COUNT 关键字,用于计算序列中满足条件的对象个数。下列扩展方法表达式返回拥有 3 个角色的用户数量:
var result = db.Users.Count(o => o.Roles.Count == 3);
Min 操作符类似于 SQL 中的 MIN 关键字,用于返回按条件计算的最小值。下列扩展方法表达式返回拥有最少角色数量的用户所拥有的角色数量:
var result = db.Users.Min(o => o.Roles.Count);
Max 操作符类似于 SQL 中的 MAX 关键字,用于返回按条件计算的最大值。下列扩展方法表达式返回拥有角色数量最多的用户所拥有的角色数量:
var result = db.Users.Max(o => o.Roles.Count);
Sum 操作符类似于 SQL 中的 SUM 关键字,用于返回按条件计算的总数。下列扩展方法表达式返回已赋予用户的所有角色总数:
var result = db.Users.Sum(o => o.Roles.Count);
Average 操作符类似于 SQL 中的 AVERAGE 关键字,用于返回按条件计算的平均值。下列扩展方法表达式,用于返回用户所拥有的角色平均数:
var result = db.Users.Average(o => o.Roles.Count);
本文内容来自:艺林博客:http://yilin.cnblogs.com/
Linq的一些基础查询的更多相关文章
- [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- LINQ驱动数据的查询功能
一.LINQ概念 LINQ是微软在.NetFramework3.5中新加入的语言功能,在语言中以程序代码方式处理集合的能力. 1.1 LINQ VS 循环处理 在我刚工作时候,对于集合对象的处理一般是 ...
- LINQ中的一些查询语句格式
LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...
- Mego开发文档 - 基础查询
基础查询 Mego 使用语言集成查询(LINQ)从数据库查询数据.LINQ允许您使用C#(或其他.NET语言)根据派生的上下文和实体类编写强类型查询.将LINQ查询的表示传递给数据库提供者,翻译为数据 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- HQL基础查询语句
HQL基础查询语句 1.使用hql语句检索出Student表中的所有列 //核心代码 @Test public void oneTest() { Query query=session.createQ ...
- Linq to 泛型集合查询集合包括大写M和年龄小于等于18
#region Linq to 泛型集合查询集合包括大写M和年龄小于等于18 //List<Student> list = new List<Student&g ...
- Linq to SQL 基础篇
LinqtoSqlDataContext Linq = new LinqtoSqlDataContext(ConfigurationManager.ConnectionStrings["sz ...
随机推荐
- 【译】神经网络与深度学习 Ch1-Section0
用神经网络识别手写数字 人类的视觉系统是是大自然的奇迹.考虑下面手写数字序列: 大多数人能够轻易地是识别出是504192.在我们大脑的每个半球都有一个基础的皮质,这就是我们熟知的V1区,它包含了14亿 ...
- PHP命名空间(Namespace)的使用详解(转)
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- jquery中ajax的dataType属性包括哪几项
参考ajax api文档:http://www.w3school.com.cn/jquery/ajax_ajax.asp dataType类型:String预期服务器返回的数据类型.如果不指定,jQu ...
- LeetCode_Subsets
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
- Keil C51中函数指针的使用
函数指针在C语言中应用较为灵活.在单片机系统中,嵌入式操作系统.文件系统和网络协议栈等一些较为复杂的应用都大量地使用了函数指针.Keil公司推出的C51编译器是事实上80C51 C编程的工业标准,它针 ...
- NSIS脚本根据操作系统版本动态决定默认安装目录
问题描述: 因为windows XP和windows 7的program files不同(有program files(x86)),所以需要动态根据系统的位数设置默认安装目录 References: ...
- Min and Max
Min and Max 需要处理不同数据类型; 另外*args, 表示的是位置参数, *kwargs表示的是key参数, args的类型为tuple类型, 参数为min(3, 2)时, args为(3 ...
- C# 调用外部程序,并获取输出和错误信息
1. 同步模式 public void exec(string exePath, string parameters) { System.Diagnostics.ProcessStartInfo ps ...
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- uva1220--树的最大独立集+判重
题意是挑选尽量多的人,并且每个人都不和他的父节点同时出现,很明显的最大独立集问题,难点在于如何判断方案是否唯一. 详情请见刘汝佳<算法竞赛入门经典--第二版>P282 #include&l ...