Konwertowanie typów danych (C#)
Metody konwersji zmieniają typ obiektów wejściowych.
Ważne
Te przykłady używają System.Collections.Generic.IEnumerable<T> źródła danych. Źródła danych oparte na System.Linq.IQueryProvider System.Linq.IQueryable<T> źródłach danych i drzewach wyrażeń. Drzewa wyrażeń mają ograniczenia dotyczące dozwolonej składni języka C#. Ponadto każde IQueryProvider
źródło danych, takie jak EF Core , może nakładać więcej ograniczeń. Zapoznaj się z dokumentacją źródła danych.
Operacje konwersji w zapytaniach LINQ są przydatne w różnych aplikacjach. Poniżej przedstawiono kilka przykładów:
- Metoda Enumerable.AsEnumerable może służyć do ukrywania niestandardowej implementacji typu standardowego operatora zapytania.
- Metoda Enumerable.OfType może służyć do włączania nieparametryzowanych kolekcji na potrzeby wykonywania zapytań LINQ.
- Metody Enumerable.ToArray, , Enumerable.ToListEnumerable.ToDictionaryi Enumerable.ToLookup mogą służyć do wymuszania natychmiastowego wykonywania zapytania zamiast odroczenia go do momentu wyliczenia zapytania.
Metody
W poniższej tabeli wymieniono standardowe metody operatorów zapytań, które wykonują konwersje typów danych.
Metody konwersji w tej tabeli, których nazwy zaczynają się od "Jako", zmieniają statyczny typ kolekcji źródłowej, ale nie wyliczają. Metody, których nazwy zaczynają się od "Do", wyliczają kolekcję źródłową i umieszczają elementy w odpowiednim typie kolekcji.
Nazwa metody | opis | Składnia wyrażeń zapytań języka C# | Więcej informacji |
---|---|---|---|
AsEnumerable | Zwraca dane wejściowe wpisane jako IEnumerable<T>. | Nie dotyczy. | Enumerable.AsEnumerable |
AsQueryable | Konwertuje (ogólny) IEnumerable na (ogólny) IQueryable. | Nie dotyczy. | Queryable.AsQueryable |
Rzutowanie | Rzutuje elementy kolekcji na określony typ. | Użyj jawnie wpisanej zmiennej zakresu. Na przykład:from string str in words |
Enumerable.Cast Queryable.Cast |
OfType | Filtruje wartości w zależności od ich możliwości rzutowania do określonego typu. | Nie dotyczy. | Enumerable.OfType Queryable.OfType |
ToArray | Konwertuje kolekcję na tablicę. Ta metoda wymusza wykonywanie zapytań. | Nie dotyczy. | Enumerable.ToArray |
ToDictionary | Umieszcza elementy w oparciu Dictionary<TKey,TValue> o funkcję selektora kluczy. Ta metoda wymusza wykonywanie zapytań. | Nie dotyczy. | Enumerable.ToDictionary |
Lista dolist | Konwertuje kolekcję na .List<T> Ta metoda wymusza wykonywanie zapytań. | Nie dotyczy. | Enumerable.ToList |
ToLookup | Umieszcza elementy w słowniku Lookup<TKey,TElement> (jeden do wielu) na podstawie funkcji selektora kluczy. Ta metoda wymusza wykonywanie zapytań. | Nie dotyczy. | Enumerable.ToLookup |
Uwaga
W poniższych przykładach w tym artykule użyto typowych źródeł danych dla tego obszaru.
Każdy z nich Student
ma poziom klasy, dział podstawowy i serię wyników. Obiekt Teacher
ma również właściwość identyfikującą City
kampus, w którym nauczyciel posiada zajęcia. Element Department
ma nazwę i odwołanie do osoby Teacher
, która służy jako szef działu.
Przykładowy zestaw danych można znaleźć w repozytorium źródłowym.
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; }
}
Przykład składni wyrażenia zapytania
Poniższy przykład kodu używa jawnie typizowanej zmiennej zakresu do rzutowania typu do podtypu przed uzyskaniem dostępu do elementu członkowskiego, który jest dostępny tylko w podtypie.
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);
}
Równoważne zapytanie można wyrazić przy użyciu składni metody, jak pokazano w poniższym przykładzie:
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}