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

Обновлен: Ноябрь 2007

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

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

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

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

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

Методы

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

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

Имя метода

Описание

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

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

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

AsEnumerable

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

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

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

Enumerable.AsEnumerable<TSource>

AsQueryable

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

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

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

Queryable.AsQueryable

Cast

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

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

from string str in words

From … As …

Enumerable.Cast<TResult>

Queryable.Cast<TResult>

OfType

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

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

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

Enumerable.OfType<TResult>

Queryable.OfType<TResult>

ToArray

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

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

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

Enumerable.ToArray<TSource>

ToDictionary

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

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

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

Enumerable.ToDictionary

ToList

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

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

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

Enumerable.ToList<TSource>

ToLookup

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

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

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

Enumerable.ToLookup

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

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

Class Plant
    Public Name As String
End Class

Class CarnivorousPlant
    Inherits Plant
    Public 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
    */
}

Дополнительные сведения о преобразовании типов данных

Topic Location
Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ LINQ (Language-Integrated Query)
Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ dv_Linq
Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ dv_Linq

См. также

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

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

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

Ссылки

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

Условие From (Visual Basic)

System.Linq