ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LINQ查询子句

2022-01-04 23:00:51  阅读:152  来源: 互联网

标签:数据源 LINQ 查询 num 子句 new 表达式


概述

查询表达式

查询表达式是一种查询语法表示的表达式,由一组用类似SQL的语法编写的句子组成。每一个子句可以包含一个或多个C#表达式。

var list = from num in nums
    where num % 2 != 0
    orderby num descending
    select num;

LINQ查询表达式必需以from子句开头,并且必需以selectgroup子句结束,中间可以添加多个子句

LINQ查询表达式包含的子句

  • from子句:指定查询操作的数据源和范围变量
  • where子句:筛选元素的逻辑条件,返回值是一个bool类型
  • select子句:指定查询结果的类型和表现形式
  • orderby子句:对查询结果进行排序(升序或降序)
  • group子句:对查询结果进行分组
  • into子句:提供一个临时的标识符,该表示可充当对join/group/select子句结果的引用
  • join子句:连接多个查询操作的数据源
  • let子句:引入用于存储查询表达式的子表达式结果的范围变量

from子句

LINQ查询表达式必需包含from子句,并且必须以from子句开头。from子句指定的数据源类型必须为IEnumerableIEnumerable<T>或者两者的派生类型(例如:数据、List、ArrayList等)

int[] nums = {1, 7, 9, 10, 29, 21}
var list = from num in nums
    where num % 2 != 0
    orderby num descending
    select num;

如果数据源是泛型类型,则编译器可以自动推断出范围变量的类型,比如上面的num类型为int类型。如果数据源是非泛型类型,如ArrayList,则必须显式的指定范围变量的数据类型。

复合from子句查询

如果数据源(本身是一个序列)的元素还包含子数据源(如序列、列表等),如果要查询子数据源中的数据则需要使用from子句。

Student obj1 = new Student() { StudId = 1001, StuName = "学员1", ScoreList = new List<int>() { 90, 80, 100 } };
Student obj2 = new Student() { StudId = 1001, StuName = "学员2", ScoreList = new List<int>() { 90, 98, 50 } };
Student obj3 = new Student() { StudId = 1001, StuName = "学员3", ScoreList = new List<int>() { 90, 60, 45 } };
List<Student> stuList = new List<Student>() { obj1, obj2, obj3 };
// 查询成绩包含95分以上的学员
var result = from stu in stuList
    from score in stu.ScoreList
    where score >= 95
    select stu;
// 显示查询结果
foreach (var item in result)
{
    Console.WriteLine("成绩包含95以上的学员有:{0}", item.StuName);
}
Console.ReadLine();

输出结果:

成绩包含95以上的学员有:学员1
成绩包含95以上的学员有:学员2

标签:数据源,LINQ,查询,num,子句,new,表达式
来源: https://www.cnblogs.com/holychan/p/15764971.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有