LINQ查詢表示式的結構
阿新 • • 發佈:2018-11-19
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"}, 6new 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子句是第一個字句的查詢主體
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 }