轉換資料類型 (C#)
轉換方法會變更輸入物件的類型。
重要
這些範例會使用 System.Collections.Generic.IEnumerable<T> 資料來源。 根據 System.Linq.IQueryProvider 的資料來源會使用 System.Linq.IQueryable<T> 資料來源和運算式樹狀架構。 運算式樹狀架構在允許的 C# 語法方面有限制。 此外,每個 IQueryProvider
資料來源 (例如 EF Core) 可能會施加更多限制。 檢查資料來源的文件。
LINQ 查詢中的轉換作業可用於各種應用程式。 下列是一些範例:
- Enumerable.AsEnumerable 方法可以用來隱藏類型之標準查詢運算子的自訂實作。
- Enumerable.OfType 方法可以用來啟用非參數化集合以進行 LINQ 查詢。
- Enumerable.ToArray、Enumerable.ToDictionary、Enumerable.ToList 和 Enumerable.ToLookup 方法可以用來強制立即執行查詢,而不是延後到列舉查詢。
方法
下表列出執行資料型別轉換的標準查詢運算子方法。
此表格中名稱開頭為「As」的轉換方法會變更來源集合的靜態型別,但不會列舉它。 名稱開頭為 "To" 的方法會列舉來源集合,並將項目放入對應的集合類型。
方法名稱 | 描述 | C# 查詢運算式語法 | 相關資訊 |
---|---|---|---|
AsEnumerable | 傳回 IEnumerable<T> 類型的輸入。 | 不適用。 | Enumerable.AsEnumerable |
AsQueryable | 將 (泛型) IEnumerable 轉換成 (泛型) IQueryable。 | 不適用。 | Queryable.AsQueryable |
Cast | 將集合的項目轉型為指定的類型。 | 使用類型明確的範圍變數。 例如:from string str in words |
Enumerable.Cast Queryable.Cast |
OfType | 根據可轉型為所指定類型的能力來篩選值。 | 不適用。 | Enumerable.OfType Queryable.OfType |
ToArray | 將集合轉換為陣列。 這個方法會強制執行查詢。 | 不適用。 | Enumerable.ToArray |
ToDictionary | 根據索引鍵選取器函式,將項目放入 Dictionary<TKey,TValue>。 這個方法會強制執行查詢。 | 不適用。 | Enumerable.ToDictionary |
ToList | 將集合轉換成 List<T>。 這個方法會強制執行查詢。 | 不適用。 | Enumerable.ToList |
ToLookup | 根據索引鍵選取器函式,將項目放入 Lookup<TKey,TElement> (一對多字典)。 這個方法會強制執行查詢。 | 不適用。 | Enumerable.ToLookup |
注意
本文中的下列範例會使用此區域的通用數據源。
每個 Student
都有一個等級、一個主要部門和一系列分數。 Teacher
也有一個 City
屬性,可識別教師持有課程的校園。 Department
具有名稱,以及擔任部門負責人 Teacher
的參考。
您可以在來源存放庫中找到範例數據集。
public enum GradeLevel
{
FirstYear = 1,
SecondYear,
ThirdYear,
FourthYear
};
public class Student
{
public required string FirstName { get; init; }
public required string LastName { get; init; }
public required int ID { get; init; }
public required GradeLevel Year { get; init; }
public required List<int> Scores { get; init; }
public required int DepartmentID { get; init; }
}
public class Teacher
{
public required string First { get; init; }
public required string Last { get; init; }
public required int ID { get; init; }
public required string City { get; init; }
}
public class Department
{
public required string Name { get; init; }
public int ID { get; init; }
public required int TeacherID { get; init; }
}
查詢運算式語法範例
下列程式碼範例會先使用類型明確的範圍變數將類型轉型為子類型,再存取只能在子類型上使用的成員。
IEnumerable people = students;
var query = from Student student in students
where student.Year == GradeLevel.ThirdYear
select student;
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
對等查詢可以使用方法語法來表示,如下列範例所示:
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}