Sdílet prostřednictvím


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

  1. Nová aplikace konzoly otevřete v aplikaci Visual Studio.Name it PredicateFilters.

  2. 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ů.

  3. Poznámky, Main metoda v StudentClass.

  4. 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);
            }
        }
    }
    
  5. Přidejte následující řádek Main metoda třídy DynamicPredicates, podle prohlášení o ids.

    QueryById(ids);
    
  6. Stiskněte klávesu F5 ke spuštění projektu.

  7. V okně příkazového řádku se zobrazí následující výstup:

    Garcia: 114

    O'Donnell: 112

    Omelchenko: 111

  8. 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.

  9. Klikněte na kartu Ladění.

  10. 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.

  11. Change QueryByID(ids) to QueryByID(args) in the Main method.

  12. Stiskněte klávesu F5 ke spuštění projektu.

  13. 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.

  1. 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í.

  2. 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);
        }
    }
    
  3. V argumenty příkazového řádku okno Nahradit ID čísla z předchozího postupu s celočíselnou hodnotu mezi 1 a 4.

  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]).

  5. 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#)

Koncepty

LINQ – výrazy dotazů (Průvodce programováním v C#)