IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John" }, new Student() { StudentID = 2, StudentName = "Moin" }, new Student() { StudentID = 3, StudentName = "Bill" }, new Student() { StudentID = 4, StudentName = "Ram" }, new Student() { StudentID = 5, StudentName = "Ron" } }; var selectResult = from s in studentList select s.StudentName;
select可以定義結果數據類型,可以返回用戶自定義的類型或者匿名類型
IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 13 } , new Student() { StudentID = 2, StudentName = "Moin", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } , new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 } }; // returns collection of anonymous objects with Name and Age property var selectResult = from s in studentList select new { Name = "Mr. " + s.StudentName, Age = s.Age }; // iterate selectResult foreach (var item in selectResult) Console.WriteLine("Student Name: {0}, Age: {1}", item.Name, item.Age);
方法查詢
IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 18 } , new Student() { StudentID = 2, StudentName = "Moin", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } , new Student() { StudentID = 5, StudentName = "Ron" , Age = 21 } }; var selectResult = studentList.Select(s => new { Name = s.StudentName , Age = s.Age });
SelectMany
class Student { public int Score { get; set; } public Student(int score) { this.Score = score; } } class Teacher { public string Name { get; set; } public List<Student> Students; public Teacher(string order,List<Student> students) { this.Name = order; this.Students = students; } }
List<Teacher> teachers = new List<Teacher> { new Teacher("a",new List<Student>{ new Student(100),new Student(90),new Student(30) }), new Teacher("b",new List<Student>{ new Student(100),new Student(90),new Student(60) }), new Teacher("c",new List<Student>{ new Student(100),new Student(90),new Student(40) }), new Teacher("d",new List<Student>{ new Student(100),new Student(90),new Student(60) }), new Teacher("e",new List<Student>{ new Student(100),new Student(90),new Student(50) }), new Teacher("f",new List<Student>{ new Student(100),new Student(90),new Student(60) }), new Teacher("g",new List<Student>{ new Student(100),new Student(90),new Student(60) }) };
這里有7個老師,每個人有3個學生,總共21一個學生里 查詢3個倒霉蛋沒考及格
var list1 = from t in teachers from s in t.Students where s.Score < 60 select s;
var list2 = teachers.SelectMany(t => t.Students).Where(s => s.Score < 60);
public static IEnumerable<TResult> SelectMany<TSource, TResult>( this IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector ) public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>( this IEnumerable<TSource> source, Func<TSource, IEnumerable<TCollection>> collectionSelector, Func<TSource, TCollection, TResult> resultSelector )
選出了門下有不及格學生的倒霉蛋老師+門生的分數
var list3 = teachers.SelectMany( t => t.Students, (t, s) => new { t.Name, s.Score }) .Where(n => n.Score < 60);