Поделиться через


Преобразование типов данных

Методы преобразования изменяют тип входных объектов.

Операции преобразования в запросах LINQ полезны для различных приложений. Ниже приведены некоторые примеры.

  • Метод Enumerable.AsEnumerable``1 может использоваться для скрытия пользовательскую реализацию стандартного оператора запроса типа.

  • Метод Enumerable.OfType``1 может использоваться для поддержки запросов LINQ к непараметризованным коллекциям.

  • Методы Enumerable.ToArray``1, Enumerable.ToDictionary``2, Enumerable.ToList``1 и Enumerable.ToLookup``2 можно использовать для принудительного немедленного выполнения запроса вместо откладывания выполнения до перечисления запроса.

Методы

В следующей таблице перечислены методы стандартных операторов запросов, которые выполняют преобразование типов данных.

Методы преобразования, имена которых начинаются с "As", изменяют статический тип исходной коллекции но не перечисляют его. Методы, имена которых начинаются с "To", перечисляют исходную коллекцию и помещают элементы в соответствующий тип коллекции.

Имя метода

Описание

Синтаксис выражения запроса C#

Синтаксис выражения запроса Visual Basic

Дополнительные сведения

AsEnumerable

Возвращает входные данные, приведенные к типу IEnumerable.

Неприменимо.

Неприменимо.

Enumerable.AsEnumerable``1

AsQueryable

Преобразует универсальный объект IEnumerable в универсальный объект IQueryable.

Неприменимо.

Неприменимо.

Queryable.AsQueryable

Cast

Приводит элементы коллекции к указанному типу.

Используйте явным образом типизированную переменную диапазона. Примеры.

from string str in words

From … As …

Enumerable.Cast``1

Queryable.Cast``1

OfType

Фильтрует значения в зависимости от возможности приведения их к указанному типу.

Неприменимо.

Неприменимо.

Enumerable.OfType``1

Queryable.OfType``1

ToArray

Преобразует коллекцию в массив. Этот метод вызывает выполнение запроса.

Неприменимо.

Неприменимо.

Enumerable.ToArray``1

ToDictionary

Помещает элементы в Dictionary на основании функции выбора ключа. Этот метод вызывает выполнение запроса.

Неприменимо.

Неприменимо.

Enumerable.ToDictionary``2

ToList

Преобразует коллекцию в List. Этот метод вызывает выполнение запроса.

Неприменимо.

Неприменимо.

Enumerable.ToList``1

ToLookup

Помещает элементы в Lookup (словарь "один ко многим") на основании функции выбора ключа. Этот метод вызывает выполнение запроса.

Неприменимо.

Неприменимо.

Enumerable.ToLookup``2

Пример синтаксиса выражения запроса

В следующем примере для приведения типа к подтипу перед обращением к члену, доступному только для подтипа, используется явным образом типизированная переменная диапазона в C# или предложение From As в Visual Basic.

Class Plant
    Public Property Name As String 
End Class 

Class CarnivorousPlant
    Inherits Plant
    Public Property TrapType As String 
End Class 

Sub Cast()

    Dim plants() As Plant = { 
        New CarnivorousPlant With {.Name = "Venus Fly Trap", .TrapType = "Snap Trap"}, 
        New CarnivorousPlant With {.Name = "Pitcher Plant", .TrapType = "Pitfall Trap"}, 
        New CarnivorousPlant With {.Name = "Sundew", .TrapType = "Flypaper Trap"}, 
        New CarnivorousPlant With {.Name = "Waterwheel Plant", .TrapType = "Snap Trap"}}

    Dim query = From plant As CarnivorousPlant In plants 
                Where plant.TrapType = "Snap Trap"  
                Select plant

    Dim sb As New System.Text.StringBuilder()
    For Each plant In query
        sb.AppendLine(plant.Name)
    Next 

    ' Display the results.
    MsgBox(sb.ToString())

    ' This code produces the following output: 

    ' Venus Fly Trap 
    ' Waterwheel Plant 

End Sub
class Plant
{
    public string Name { get; set; }
}

class CarnivorousPlant : Plant
{
    public string TrapType { get; set; }
}

static void Cast()
{
    Plant[] plants = new Plant[] {
        new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
        new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
        new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
        new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
    };

    var query = from CarnivorousPlant cPlant in plants
                where cPlant.TrapType == "Snap Trap" 
                select cPlant;

    foreach (Plant plant in query)
        Console.WriteLine(plant.Name);

    /* This code produces the following output:

        Venus Fly Trap
        Waterwheel Plant
    */
}

См. также

Задачи

Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ

Ссылки

Предложение from (справочник по C#)

Предложение From (Visual Basic)

System.Linq

Основные понятия

Общие сведения о стандартных операторах запроса

Выражения запросов LINQ (Руководство по программированию на C#)