Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Metody převodu mění typ vstupních objektů.
Důležité
Tyto ukázky používají System.Collections.Generic.IEnumerable<T> zdroj dat. Zdroje dat založené na System.Linq.IQueryProvider použití System.Linq.IQueryable<T> zdrojů dat a stromů výrazů Stromy výrazů mají omezení povolené syntaxe jazyka C#. Každý zdroj dat, například IQueryProvider, může navíc uplatňovat další omezení. Projděte si dokumentaci ke zdroji dat.
Operace převodu v dotazech LINQ jsou užitečné v různých aplikacích. Tady je několik příkladů:
- Metodu Enumerable.AsEnumerable lze použít ke skrytí vlastní implementace typu standardního operátoru dotazu.
- Tuto Enumerable.OfType metodu lze použít k povolení neparametrizovaných kolekcí pro dotazování LINQ.
- Metodu Enumerable.ToArray, , Enumerable.ToDictionaryEnumerable.ToLista Enumerable.ToLookup lze použít k vynucení okamžitého spuštění dotazu namísto odložení, dokud dotaz nebude výčtu.
Metody
Následující tabulka uvádí standardní metody operátoru dotazu, které provádějí převody datových typů.
Metody převodu v této tabulce, jejichž názvy začínají na "As", změní statický typ zdrojové kolekce, ale nevyčtou ji. Metody, jejichž názvy začínají na "To" výčet zdrojové kolekce a umístí položky do odpovídajícího typu kolekce.
| Název metody | Popis | Syntaxe výrazu dotazu jazyka C# | Další informace |
|---|---|---|---|
| AsEnumerable | Vrátí zadaný vstup jako IEnumerable<T>. | Nevztahuje se. | Enumerable.AsEnumerable |
| AsQueryable | Převede (obecný) IEnumerable na (obecný) IQueryable. | Nevztahuje se. | Queryable.AsQueryable |
| Změna typu | Přetypuje prvky kolekce na zadaný typ. | Použijte explicitně typovanou proměnnou rozsahu. Příklad:from string str in words |
Enumerable.Cast Queryable.Cast |
| Typ | Filtruje hodnoty v závislosti na jejich schopnosti přetypovat na zadaný typ. | Nevztahuje se. | Enumerable.OfType Queryable.OfType |
| ToArray | Převede kolekci na pole. Tato metoda vynutí provádění dotazů. | Nevztahuje se. | Enumerable.ToArray |
| Slovník | Vloží elementy Dictionary<TKey,TValue> do funkce selektoru klíče. Tato metoda vynutí provádění dotazů. | Nevztahuje se. | Enumerable.ToDictionary |
| Seznam úkolů | Převede kolekci na .List<T> Tato metoda vynutí provádění dotazů. | Nevztahuje se. | Enumerable.ToList |
| ToLookup | Umístí prvky do slovníku Lookup<TKey,TElement> 1:N na základě funkce selektoru klíčů. Tato metoda vynutí provádění dotazů. | Nevztahuje se. | Enumerable.ToLookup |
Poznámka:
Následující příklady v tomto článku používají společné zdroje dat pro tuto oblast.
Každý z nich Student má úroveň známek, primární oddělení a řadu výsledků. A Teacher má City také vlastnost, která identifikuje areál, kde učitel má předměty. A Department má jméno a odkaz na Teacher toho, kdo slouží jako vedoucí oddělení.
Ukázkové datové sady najdete ve zdrojovém úložišti.
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; }
}
Poznámka:
Běžné zdroje dat pro tuto oblast najdete v článku Přehled standardních operátorů dotazů .
Příklad syntaxe výrazu dotazu
Následující příklad kódu používá explicitně typovou proměnnou rozsahu k přetypování typu na podtyp před přístupem k členu, který je k dispozici pouze u podtypu.
IEnumerable people = students;
var query = from Student student in people
where student.Year == GradeLevel.ThirdYear
select student;
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
Ekvivalentní dotaz lze vyjádřit pomocí syntaxe metody, jak je znázorněno v následujícím příkladu:
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}