共用方式為


轉換資料類型 (C#)

轉換方法會變更輸入物件的類型。

重要

這些範例會使用 System.Collections.Generic.IEnumerable<T> 資料來源。 根據 System.Linq.IQueryProvider 的資料來源會使用 System.Linq.IQueryable<T> 資料來源和運算式樹狀架構。 運算式樹狀架構在允許的 C# 語法方面有限制。 此外,每個 IQueryProvider 資料來源 (例如 EF Core) 可能會施加更多限制。 檢查資料來源的文件。

LINQ 查詢中的轉換作業可用於各種應用程式。 下列是一些範例:

方法

下表列出執行資料型別轉換的標準查詢運算子方法。

此表格中名稱開頭為「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);
}

另請參閱