Condividi tramite


Conversione di tipi di dati (C#)

I metodi di conversione modificano il tipo degli oggetti di input.

Importante

In questi esempi viene usata un'origine dati System.Collections.Generic.IEnumerable<T>. Le origini dati basate su System.Linq.IQueryProvider usano origini dati System.Linq.IQueryable<T> e alberi delle espressioni. La sintassi consentita per gli alberi delle espressioni presenta limitazioni. Inoltre, ogni origine dati IQueryProvider, ad esempio EF Core può imporre altre restrizioni. Consultare la documentazione relativa all'origine dati.

Le operazioni di conversione nelle query LINQ sono utili in varie applicazioni. Ecco alcuni esempi:

Metodi

Nella tabella seguente sono elencati i metodi di operatore query standard che eseguono conversioni di tipi di dati.

I metodi di conversione in questa tabella i cui nomi iniziano con "As" modificano il tipo statico della raccolta di origine ma non lo enumerano. I metodi i cui nomi iniziano con "To" enumerano la raccolta di origine e inseriscono gli elementi nel tipo di raccolta corrispondente.

Nome metodo Descrizione Sintassi di espressione della query C# Ulteriori informazioni
AsEnumerable Restituisce l'input tipizzato come oggetto IEnumerable<T>. Non applicabile. Enumerable.AsEnumerable
AsQueryable Converte un oggetto IEnumerable (generico) in un oggetto IQueryable (generico). Non applicabile. Queryable.AsQueryable
Cast Esegue il cast degli elementi di una raccolta a un tipo specificato. Usare una variabile di intervallo tipizzata in modo esplicito. Ad esempio:

from string str in words
Enumerable.Cast

Queryable.Cast
OfType Filtra i valori, a seconda della loro capacità di eseguire il cast a un tipo specificato. Non applicabile. Enumerable.OfType

Queryable.OfType
ToArray Converte una raccolta in una matrice. Questo metodo forza l'esecuzione di query. Non applicabile. Enumerable.ToArray
ToDictionary Inserisce gli elementi in un oggetto Dictionary<TKey,TValue> sulla base di una funzione del selettore di chiavi. Questo metodo forza l'esecuzione di query. Non applicabile. Enumerable.ToDictionary
ToList Converte una raccolta in un oggetto List<T>. Questo metodo forza l'esecuzione di query. Non applicabile. Enumerable.ToList
ToLookup Inserisce gli elementi in un oggetto Lookup<TKey,TElement>, un dizionario uno-a-molti, sulla base di una funzione del selettore di chiavi. Questo metodo forza l'esecuzione di query. Non applicabile. Enumerable.ToLookup

Nota

Gli esempi seguenti in questo articolo usano le origini dati comuni per questa area.
Ogni Student ha un livello di classe, un reparto primario e una serie di punteggi. Un Teacher ha anche una proprietà City che identifica il campus in cui l'insegnante tiene le lezioni. Un Department ha un nome e un riferimento a un Teacher che funge da responsabile del reparto.
È possibile trovare il set di dati di esempio nel repository di origine.

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; }
}

Esempio di sintassi delle espressioni di query

L'esempio di codice seguente usa una variabile di intervallo tipizzata in modo esplicito per eseguire il cast di un tipo a un sottotipo prima di accedere a un membro che è disponibile solo nel sottotipo.

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);
}

La query equivalente può essere espressa usando la sintassi del metodo come mostrato nell'esempio seguente:

IEnumerable people = students;

var query = people
    .Cast<Student>()
    .Where(student => student.Year == GradeLevel.ThirdYear);

foreach (Student student in query)
{
    Console.WriteLine(student.FirstName);
}

Vedi anche