Postupy: Dynamické určování filtrů predikátů při běhu (Průvodce programováním v C#)
V některých případech nevíte do běhu predikáty kolik máte použít prvky zdroj where klauzule.Jedním způsobem, jak dynamicky určit více filtrů predikátu je použití Contains``1 metodou, jak ukazuje následující příklad.V příkladu je vytvořen dvěma způsoby.Projekt je nejprve spustit filtrování na hodnoty, které jsou k dispozici v programu.Projekt je spusťte znovu vstupní k dispozici v době spuštění.
Filtrování pomocí metody obsahuje
Nová aplikace konzoly otevřete v aplikaci Visual Studio.Name it PredicateFilters.
Kopie StudentClass z třídy Postupy: Dotazování na kolekci objektů (Průvodce programováním v C#) a vložte do oboru názvů PredicateFilters pod třídy Program.StudentClassobsahuje seznam Student objektů.
Poznámky, Main metoda v StudentClass.
Nahradit třídy Program s následujícím kódem.
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); } } }
Přidejte následující řádek Main metoda třídy DynamicPredicates, podle prohlášení o ids.
QueryById(ids);
Stiskněte klávesu F5 ke spuštění projektu.
V okně příkazového řádku se zobrazí následující výstup:
Garcia: 114
O'Donnell: 112
Omelchenko: 111
Dalším krokem je projekt spustit znovu, tentokrát pomocí vstupní zadané v době spuštění namísto pole ids.V Aplikaci Solution Explorer, klepněte pravým tlačítkem na PredicateFilters a klepněte na tlačítko Vlastnosti.
Klikněte na kartu Ladění.
V argumenty příkazového řádku okna, typ 122, 117, 120 a 115, oddělené mezerami: 122 117 120 115.Při spuštění projektu budou tyto hodnoty prvků args, parametr Main metoda.
Change QueryByID(ids) to QueryByID(args) in the Main method.
Stiskněte klávesu F5 ke spuštění projektu.
V okně příkazového řádku se zobrazí následující výstup:
Adams: 120
Feng: 117
Garcia: 115
Tucker: 122
Filtrovat pomocí příkazu switch.
Můžete použít switch příkaz vybrat mezi předdefinována alternativních dotazů.V následujícím příkladu studentQuery používá jinou where klauzule v závislosti na třídě, která je zadána úroveň nebo rok, v době spuštění.
Následující metoda zkopírovat a vložit do třídy 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); } }
V argumenty příkazového řádku okno Nahradit ID čísla z předchozího postupu s celočíselnou hodnotu mezi 1 a 4.
V Main metoda, nahradit volání QueryByID s následující volání, které odešle první prvek z args jako svůj argument array: QueryByYear(args[0]).
Stiskněte klávesu F5 ke spuštění projektu.
Použití této metody ve vlastní aplikace
- Když je tato metoda přizpůsobit vlastní aplikaci, nezapomeňte, že LINQ vyžaduje verze 3.5 nebo 4 .NET Framework, a že projekt musí obsahovat odkaz na System.Core.dll a using směrnice pro System.Linq.LINQ SQL, XML LINQ a LINQ DataSet typy vyžadují další using směrnic a odkazy.Další informace naleznete v tématu Postupy: Vytvoření projektu LINQ.
Viz také
Referenční dokumentace
where – klauzule (Referenční dokumentace jazyka C#)