Porady: dynamiczne określanie filtrów predykatów w środowisku uruchomieniowym (Przewodnik programowania w języku C#)
W niektórych przypadkach nie znasz do czasu wykonywania predykaty ile mają zastosowanie do elementów źródłowych w where klauzuli.Jednym ze sposobów dynamicznie określić wiele filtrów predykatu jest użycie Contains``1 metody, jak pokazano w poniższym przykładzie.Przykładem jest skonstruowany na dwa sposoby.Po pierwsze projekt jest uruchamiany przez filtrowanie wartości, które są dostarczane w programie.Następnie projekt jest uruchamiany ponownie przy użyciu danych wejściowych w czasie wykonywania.
Aby filtrować przy użyciu metody zawiera
Otwórz nową aplikację konsoli w programie Visual Studio.Name it PredicateFilters.
Kopia StudentClass klasy z Porady: kwerenda dotycząca kolekcji obiektów (Przewodnik programowania w języku C#) i wkleić go do obszaru nazw PredicateFilters pod spodem klasy Program.StudentClasszawiera listę Student obiektów.
Komentarz Main metodę w StudentClass.
Zastąpić klasy Program z następującego kodu.
class DynamicPredicates : StudentClass { static void Main(string[] args) { string[] ids = { "111", "114", "112" }; Console.WriteLine("Press any key to exit."); Console.ReadKey(); } static void QueryByID(string[] ids) { var queryNames = from student in students let i = student.ID.ToString() where ids.Contains(i) select new { student.LastName, student.ID }; foreach (var name in queryNames) { Console.WriteLine("{0}: {1}", name.LastName, name.ID); } } }
Dodaj następujący wiersz, aby Main metoda w klasie DynamicPredicates, w deklaracji z ids.
QueryById(ids);
Naciśnij klawisz F5, aby uruchomić projekt.
Następujące dane wyjściowe są wyświetlane w oknie wiersza polecenia:
Garcia: 114
O'Donnell: 112
Omelczenko: 111
Następnym krokiem jest ponownie uruchomić projekt, tym razem przy użyciu wejściowe wprowadzone w czasie wykonywania, zamiast tablicy ids.W Solution Explorer, kliknij prawym przyciskiem myszy PredicateFilters , a następnie kliknij przycisk Właściwości.
Kliknij przycisk debugowania kartę.
W argumenty wiersza polecenia okna, należy wpisać 122, 117, 120 i 115, oddzielonych spacjami: 122 117 120 115.Po uruchomieniu projektu, wartości te stają się elementy args, parametr Main metody.
Change QueryByID(ids) to QueryByID(args) in the Main method.
Naciśnij klawisz F5, aby uruchomić projekt.
Następujące dane wyjściowe są wyświetlane w oknie wiersza polecenia:
Adams: 120
Feng: 117
Garcia: 115
Tucker: 122
Aby filtrować przy użyciu instrukcji switch
Można użyć switch instrukcji, aby wybrać kod spośród wstępnie ustalone alternatywnych kwerend.W poniższym przykładzie studentQuery korzysta z inną where klauzuli, w zależności od kategorii, których poziom lub roku, jest określony w czasie wykonywania.
Skopiuj następujące metody i wkleić go do klasy DynamicPredicates.
// To run this sample, first specify an integer value of 1 to 4 for the command // line. This number will be converted to a GradeLevel value that specifies which // set of students to query. // Call the method: QueryByYear(args[0]); static void QueryByYear(string level) { GradeLevel year = (GradeLevel)Convert.ToInt32(level); IEnumerable<Student> studentQuery = null; switch (year) { case GradeLevel.FirstYear: studentQuery = from student in students where student.Year == GradeLevel.FirstYear select student; break; case GradeLevel.SecondYear: studentQuery = from student in students where student.Year == GradeLevel.SecondYear select student; break; case GradeLevel.ThirdYear: studentQuery = from student in students where student.Year == GradeLevel.ThirdYear select student; break; case GradeLevel.FourthYear: studentQuery = from student in students where student.Year == GradeLevel.FourthYear select student; break; default: break; } Console.WriteLine("The following students are at level {0}", year.ToString()); foreach (Student name in studentQuery) { Console.WriteLine("{0}: {1}", name.LastName, name.ID); } }
W argumenty wiersza polecenia okna, Zastąp identyfikator numery z poprzedniej procedury z całkowitą z zakresu od 1 do 4.
W Main metodę, zastąpić wywołanie QueryByID z następujące wywołanie, które wysyła pierwszy element z args tablicy jako argumentu: QueryByYear(args[0]).
Naciśnij klawisz F5, aby uruchomić projekt.
Aby użyć tej metody we własnych aplikacjach
- Jeśli ta metoda dostosowania się do własnej aplikacji, należy pamiętać, że LINQ wymaga wersji 3.5 lub 4 .NET Framework, i że projekt musi zawierać odniesienie do System.Core.dll i using w dyrektywie dla System.Linq.LINQ SQL, LINQ XML i LINQ DataSet typów wymagają dodatkowych using dyrektyw i odwołania.Aby uzyskać więcej informacji, zobacz Porady: tworzenie projektu LINQ.
Zobacz też
Informacje
Klauzula where (odwołanie w C#)
Koncepcje
Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)