1.from子句
from子句指定了要作为数据源使用的数据集合。引入了迭代变量。要点:
from Type Item in Items
1st.迭代变量逐个表示数据源的每一个元素
2nd.from的语法:a.type是集合中的元素类型,这是可选的,因为编译器可以从集合来推断类型。b.Items是迭代变量的名字。c.Item是要查询的集合的名字。集合必须是可枚举的。
2.join子句
1st.使用联结来结合两个或者更多集合中的数据。
2nd.联结操作接受两个集合然后创建一个临时的对象集合,每一个对象包含原始集合对象中的所有字段。
语法:jion Identify in collection2 on Filed1 equals Filed2
例子:var query=from s in student join c in studentsInCourses on s.sID equals c.sID where s.Name=="name" select s;
demo:
1 class Program 2 { 3 static Student[] student = new Student[]{ 4 new Student{sID=1,Name="Zach"}, 5 new Student{sID=2,Name="Tai"}, 6 new Student{sID=3,Name="Feng"} 7 }; 8 static Course[] course = new Course[]{ 9 new Course{CourseName="History",sID=1}, 10 new Course{sID=2,CourseName="Art"}, 11 new Course{CourseName="Art",sID=1}, 12 new Course{CourseName="Art",sID=3}, 13 new Course{CourseName="Physics",sID=3} 14 }; 15 static void Main(string[] args) 16 { 17 var query = from s in student join c in course on s.sID equals c.sID where c.CourseName == "Physics" select s.Name; 18 foreach (var q in query) 19 { 20 Console.WriteLine("{0},",q); 21 } 22 Console.Read(); 23 24 } 25 } 26 class Student 27 { 28 public int sID; 29 public string Name; 30 } 31 class Course 32 { 33 public string CourseName; 34 public int sID; 35 }
3.form...let...where片段
a.from子句:
第一个from子句是查询表达式必须的子句
第二个from子句是第一个字句的查询主体
扫描二维码关注公众号,回复:
4141950 查看本文章
select子句创建一个匿名类型的对象
1 static void Main(string[] args) 2 { 3 var groupA = new[] { 3,4,5,6}; 4 var groupB = new[] { 6,7,8,9}; 5 var someInts = from a in groupA from b in groupB where a < 5 && b >= 7 select new { a, b,sum=a+b}; 6 foreach (var y in someInts) 7 Console.WriteLine(y); 8 Console.Read(); 9 }
b.let子句:
let子句接受一个表达式的运算并且把它赋值给一个需要在其他运算中使用的标识符。语法:let Identifier=Expression
1 static void Main(string[] args) 2 { 3 var groupA = new[] { 3,4,5,6}; 4 var groupB = new[] { 6,7,8,9}; 5 var someInts = from a in groupA from b in groupB let sum = a + b where sum == 12 select new { a,b,sum}; 6 foreach (var y in someInts) 7 Console.WriteLine(y); 8 Console.Read(); 9 }
c.where子句:
where子句根据之后的运算来出去不符合指定条件的项。语法:where BooleanExpression
使用时注意:1.只要是在from...let...where部分中,查询表达式可以有任意多个where子句。2.一个项必须满足where子句才能避免在之后被过滤。
1 static void Main(string[] args) 2 { 3 var groupA = new[] { 3,4,5,6}; 4 var groupB = new[] { 6,7,8,9}; 5 var someInts = from a in groupA from b in groupB let sum = a + b where sum >= 11 where a >= 4 select new { a,b,sum}; 6 foreach (var y in someInts) 7 Console.WriteLine(y); 8 Console.Read(); 9 }