Linq的一些基础查询

  其中包括对数据中经常使用的条件查询,投影,分区,排序,分组,集合,元素,量词,和集集等标准查询操做符进行分类介绍翻译

  一.条件操做符对象

  条件操做符where相似于SQL中的where子句,用于实现条件查询。下列扩张方法表达式查询知足条件“角色不能为null”的用户集合;blog

  var user = db.Users.Where(o => o.Roles != null);排序

  =====>接口

  var users=from 0 in db.Usersip

        where o.Roles != null编译器

        select o;博客

 

  二.投影操做符io

  投影操做符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 };

 

   6、集合操做符

  集合操做符包括 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/ 

相关文章
相关标签/搜索