Relacje typu w operacjach kwerend LINQ (C#)
Aby efektywnie pisać zapytania, należy zrozumieć jak powiązane są ze sobą typy zmiennych w kompletnej operacji zapytania.Jeśli zrozumiesz te relacje łatwiej będzie pojąć przykłady LINQ i przykłady kodu w dokumentacji.Dowiesz się także, co dzieje się, kiedy zmienne są wpisywane niejawnie przy użyciu var.
Operacje zapytań LINQ są wpisane pogrubieniem w źródle danych, w samym zapytaniu i w wykonaniu zapytania.Typ zmiennych w zapytaniu musi być kompatybilny z typem elementów źródła danych i z typem zmiennej iteracji w instrukcji foreach.To pogrubione wpisywanie gwarantuje, że błędy wpisywania są wyłapywane w czasie kompilacji, kiedy mogą być poprawione zanim użytkownik je napotka.
W celu przedstawienia relacji tych typów, większość przykładów, które zostaną pokazane używa jawnego wpisywania wszystkich zmiennych.Ostatni przykład pokazuje, że takie same zasady mają zastosowanie, nawet kiedy użyjesz niejawnego określania typów za pomocą var..
Kwerendy, które nie przetwarzają danych źródłowych
Na poniższej ilustracji przedstawiono operację zapytania LINQ, która nie wykonuje transformacji danych.Źródło zawiera sekwencję ciągów i wynik zapytania jest również sekwencją ciągów.
Argument typu źródła danych określa typ zmiennej zakresu.
Typ wybranego obiektu określa typ zmiennej zapytania.W tym miejscu name jest ciągiem.Dlatego też zmienna zapytania IEnumerable<string>.
Zmienna zapytania jest powtarzana w instrukcji foreach.Ponieważ zmienna zapytania jest sekwencja ciągów, zmienną iteracji jest ciąg.
Kwerendy, które przetwarzają dane źródłowe
Na poniższej ilustracji przedstawiono operację zapytania LINQ do SQL , która wykonuje prostą transformację danych.Zapytanie pobiera sekwencję obiektów Customer jako dane wejściowe i wybiera jedynie właściwość Name w wyniku.Ponieważ Name jest ciągiem, tworzy zapytanie sekwencji ciągów jako dane wyjściowe.
Argument typu źródła danych określa typ zmiennej zakresu.
Instrukcja select wraca właściwość Name zamiast pełnego obiektu Customer.Ponieważ Name jest ciągiem, argument typu custNameQuery jest string, a nie Customer.
Ponieważ custNameQuery jest sekwencją ciągów, foreach Zmienna iteracji pętli musi być również string.
Na poniższej ilustracji przedstawiono nieco bardziej skomplikowaną transformację.Instrukcjaselect zwraca typ anonimowy, który uchwyci tylko dwa elementy członkowskie oryginalnego obiektu Customer.
Argument typu źródła danych jest zawsze typem zmiennej zakresu w zapytaniu.
Ponieważ select instrukcja generuje typ anonimowy, zmienna zapytania musi być wpisana niejawnie przy użyciu var.
Ponieważ typ zmiennej zapytania jest niejawny, zmienna iteracji w foreach pętli musi być ukryta.
Umożliwienie kompilatorowi wywnioskowania informacji o typie.
Chociaż należy zrozumieć relacje typów w operacji zapytania, masz opcję, aby umożliwić kompilatorowi wykonanie całąj pracy za Ciebie.Słowo kluczowe var. może być używane dla dowolnej zmiennej lokalnej w operacji zapytania.Następujący rysunek jest podobny do przykładu numer 2, który została omówiony wcześniej.Jednak kompilator dostarcza silnego typu dla każdej zmiennej w operacji zapytania.
Aby uzyskac więcej informacji o var, zobacz Niejawnie wpisane zmienne lokalne (Przewodnik programowania w języku C#).
Zobacz też
Koncepcje
Relacje typu w operacjach zapytań (Visual Basic)