Csharp/CSharp Tutorial/LINQ/Filter

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Calling the Common Library Filter Method

<source lang="csharp">using System.Collections; using System; public delegate bool IntFilter(int i); public class MainClass {

   public static void Main() {
       int[] nums = { 1, 2, 3, 4, 5, 6};
       int[] oddNums = FilterArrayOfInts(nums, IsOdd);
       foreach (int i in oddNums)
           Console.WriteLine(i);
   }
   public static bool IsOdd(int i) {
       return ((i & 1) == 1);
   }
   public static int[] FilterArrayOfInts(int[] ints, IntFilter filter) {
       ArrayList aList = new ArrayList();
       foreach (int i in ints) {
           if (filter(i)) {
               aList.Add(i);
           }
       }
       return ((int[])aList.ToArray(typeof(int)));
   }

}</source>

Calling the Filter Method with a Lambda Expression

<source lang="csharp">using System; using System.Collections; public delegate bool IntFilter(int i); public class MainClass {

   public static int[] FilterArrayOfInts(int[] ints, IntFilter filter) {
       ArrayList aList = new ArrayList();
       foreach (int i in ints) {
           if (filter(i)) {
               aList.Add(i);
           }
       }
       return ((int[])aList.ToArray(typeof(int)));
   }
   public static void Main() {
       int[] nums = { 1, 2, 3, 4, 5};
       int[] oddNums = FilterArrayOfInts(nums, i => ((i & 1) == 1));
       foreach (int i in oddNums)
           Console.WriteLine(i);
   }

}</source>

Calling the Filter Method with an Anonymous Method

<source lang="csharp">using System; using System.Collections; public delegate bool IntFilter(int i); public class MainClass {

   public static int[] FilterArrayOfInts(int[] ints, IntFilter filter) {
       ArrayList aList = new ArrayList();
       foreach (int i in ints) {
           if (filter(i)) {
               aList.Add(i);
           }
       }
       return ((int[])aList.ToArray(typeof(int)));
   }
   public static void Main() {
       int[] nums = { 1, 2, 3, 4, 5, 6};
       int[] oddNums = FilterArrayOfInts(nums, delegate(int i) { return ((i & 1) == 1); });
       foreach (int i in oddNums)
           Console.WriteLine(i);
   }

}</source>

Use delegate to create a filter

<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.IO; using System.Reflection; using System.Linq; using System.Xml; using System.Xml.Linq; class Person {

   int _id;
   int _idRole;
   string _lastName;
   string _firstName;
   public int ID {
       get { return _id; }
       set { _id = value; }
   }
   public int IDRole {
       get { return _idRole; }
       set { _idRole = value; }
   }
   public string LastName {
       get { return _lastName; }
       set { _lastName = value; }
   }
   public string FirstName {
       get { return _firstName; }
       set { _firstName = value; }
   }

} class Program {

   static void Main(string[] args) {
       List<Person> people = new List<Person> {
              new Person { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"},
              new Person { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"}
           };
       Func<Person, bool> filter = delegate(Person p) { return p.ID == 1; };
       var query = people
                   .Where(filter)
                   .Select(p => new { p.FirstName, p.LastName });
   }

}</source>