C#LINQ查询子句

查询表达式

用查询语法表示的表达式,由一组相似于SQL的语法编写的句子组成
LINQ查询表达式必须以from子句开头,而且必须以select或group子句结束,中间能够添加多个子句web

from子句

from子句指定的数据源类型必须为IEnumerable、Ienumerable或者二者的派生类型svg

int[] nums = {1,7,6,5,8,4,1,2,11,23};
var list = from num in nums select num;

num表示范围变量,表示数据源中的每个元素,可任意命名
nums表示的是数据源spa

复合from子句查询

若是数据源(自己是一个序列)的元素还包含子数据源(如序列、列表等),若是要查询子数据源中的元素,则须要使用复合from子句
示例:code

static void Main(string[] args)
        {
            Student obj1 = new Student()
            {
                StuId = 1001,
                StuName = "人员1",
                ScoreList = new List<int>() { 90, 56, 76 }
            };
            Student obj2 = new Student()
            {
                StuId = 1001,
                StuName = "人员2",
                ScoreList = new List<int>() { 40, 78, 46 }
            };
            Student obj3 = new Student()
            {
                StuId = 1001,
                StuName = "人员3",
                ScoreList = new List<int>() { 20, 88, 46 }
            };
            List<Student> stuList = new List<Student>() { obj1, obj2, obj3 };
            var result = from stu in stuList
                         from sc in stu.ScoreList
                         where sc < 40
                         select stu;
            foreach(var item in result)
            {
                Console.WriteLine(item.StuName);
            }
            Console.ReadKey();
        }

在这里插入图片描述

多个fron子句查询

LINQ查询表达式包含两个或两个以上的独立数据源时,能够使用多个from子句查询全部数据源中的数据
示例:xml

static void Main(string[] args)
        {
            Student obj1 = new Student() { StuId = 1001, StuName = "学生1" };
            Student obj2 = new Student() { StuId = 1002, StuName = "学生2" };
            Student obj3 = new Student() { StuId = 1003, StuName = "学生3" };
            Student obj4 = new Student() { StuId = 1004, StuName = "学生4" };
            Student obj5 = new Student() { StuId = 1005, StuName = "学生5" };
            Student obj6 = new Student() { StuId = 1006, StuName = "学生6" };
            List<Student> stuList1 = new List<ConsoleApplication1.Student>() { obj1, obj2, obj3 };
            List<Student> stuList2 = new List<ConsoleApplication1.Student>() { obj4, obj5, obj6 };

            var result = from stu1 in stuList1
                         where stu1.StuId >= 1003
                         from stu2 in stuList2
                         where stu2.StuId >= 1005
                         select new { stu1, stu2 };
            foreach(var item in result)
            {
                Console.WriteLine(item.stu1.StuName+" "+item.stu1.StuId);
            }
            Console.WriteLine();
            foreach (var item in result)
            {
                Console.WriteLine(item.stu2.StuName + " " + item.stu2.StuId);
            }
            Console.ReadKey();
        }

在这里插入图片描述