LINQ中有兩個(gè)可用的投影運(yùn)算符。1)Select 2)SelectMany
Select運(yùn)算符始終返回IEnumerable集合,該集合包含基于轉(zhuǎn)換函數(shù)的元素。它類(lèi)似于產(chǎn)生平面結(jié)果集的SQL的Select子句。
現(xiàn)在,讓我們了解使用以下Student類(lèi)的Select查詢(xún)運(yùn)算符。
public class Student{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
}LINQ查詢(xún)語(yǔ)法必須以Select 或 GroupBy子句結(jié)尾。下面的示例演示了Select 運(yùn)算符,該運(yùn)算符返回StudentName的字符串集合。
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;選擇運(yùn)算符可用于根據(jù)我們的要求制定結(jié)果。它可用于返回自定義類(lèi)或匿名類(lèi)型的集合,其中包括根據(jù)我們的需要的屬性。
下面的select子句示例返回一個(gè)包含Name和Age屬性的匿名類(lèi)型的集合。
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 }
};
// 返回具有Name和Age屬性的匿名對(duì)象的集合
var selectResult = from s in studentList
select new { Name = "Mr. " + s.StudentName, Age = s.Age };
// 迭代selectResult
foreach (var item in selectResult)
Console.WriteLine("Student Name: {0}, Age: {1}", item.Name, item.Age);Dim selectResult = From s In studentList
Select New With {.Name = s.StudentName, .Age = s.Age}輸出:
Student Name: Mr. John, Age: 13 Student Name: Mr. Moin, Age: 21 Student Name: Mr. Bill, Age: 18 Student Name: Mr. Ram, Age: 20 Student Name: Mr. Ron, Age: 15
Select運(yùn)算符在方法語(yǔ)法中是可選的。但是,您可以使用它來(lái)塑造數(shù)據(jù)。在以下示例中,Select擴(kuò)展方法返回具有Name和Age屬性的匿名對(duì)象的集合:
示例:C#在方法語(yǔ)法中的Select
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 });在上面的示例中,selectResult將包含具有Name和Age屬性的匿名對(duì)象,如下面的調(diào)試視圖所示。

Dim selectResult = studentList.Select(Function(s) New With {.Name = s.StudentName,
.Age = s.Age})SelectMany 運(yùn)算符投射基于轉(zhuǎn)換函數(shù)的值序列,然后將它們扁平化為一個(gè)序列。