using System;
using System.Diagnostics;
using System.Collections;

//for using LINQ we must Implement IEnumerable<T> because : LINQ queries require a strongly-typed generic collection
public class TestCollection : IEnumerable<string>
{
    public string[] Course = { "Math", "Science", "Philosophy" };

    // Required method for implementing IEnumerable
    // it is use for find and return next element in collection

    public IEnumerator<string> GetEnumerator()
    {
        foreach (var c in Course)
        {
            yield return c;
        }
    }

    // Explicit implementation of non-generic IEnumerable
    //It returns the same enumerator as the generic version,
    //which allows compatibility with non-generic enumeration patterns.
   //IEnumerable itself is non-generic
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator(); // Call the generic version
    }

}

class Program
{
    static void Main(string[] args)
    {

        TestCollection test = new TestCollection();

        //use foreach to console result
        foreach (var c in test)
        {
            Console.WriteLine(c);
        }

        //use LINQ for Query 
        //start with "from" in Line 1
        //describe Condition in line 2
        //return result with "select" in line 3
        var ResultQuerySyntax = from c in test 
                     where c.Contains("h")
                     select c;

        foreach (var c in ResultQuerySyntax)
        {
            Console.WriteLine(c);
        }
        //section 1 (DB set or any collection)
        //section 2 (LINQ extention method)
        //section 3 (lambda expression)
        //section 4 (Condition)
        var ResultMethodSyntax = test.Where(c => c.Contains("P"));

        foreach (var c in ResultMethodSyntax)
        {
            Console.WriteLine(c);
        }

    }
    
}

 

https://github.com/