用查询语法表示的表达式,由一组相似于SQL的语法编写的句子组成
LINQ查询表达式必须以from子句开头,而且必须以select或group子句结束,中间能够添加多个子句web
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子句
示例: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(); }
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(); }