Use LINQ to get Employees in the IT department from a tree : Query « LINQ « C# / CSharp Tutorial






using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class Tree<TreeNode> : IEnumerable<TreeNode> where TreeNode : IComparable<TreeNode> {
    public Tree(TreeNode nodeValue) {
        this.NodeData = nodeValue;
        this.LeftTree = null;
        this.RightTree = null;
    }

    public void Insert(TreeNode newItem) {
        TreeNode currentNodeValue = this.NodeData;
        if (currentNodeValue.CompareTo(newItem) > 0) {
            if (this.LeftTree == null) {
                this.LeftTree = new Tree<TreeNode>(newItem);
            } else {
                this.LeftTree.Insert(newItem);
            }
        } else {
            if (this.RightTree == null) {
                this.RightTree = new Tree<TreeNode>(newItem);
            } else {
                this.RightTree.Insert(newItem);
            }
        }
    }

    public void WalkTree() {
        if (this.LeftTree != null) {
            this.LeftTree.WalkTree();
        }

        Console.WriteLine(this.NodeData.ToString());

        if (this.RightTree != null) {
            this.RightTree.WalkTree();
        }
    }

    public TreeNode NodeData { get; set; }
    public Tree<TreeNode> LeftTree { get; set; }
    public Tree<TreeNode> RightTree { get; set; }


    IEnumerator<TreeNode> IEnumerable<TreeNode>.GetEnumerator() {
        if (this.LeftTree != null) {
            foreach (TreeNode item in this.LeftTree) {
                yield return item;
            }
        }

        yield return this.NodeData;

        if (this.RightTree != null) {
            foreach (TreeNode item in this.RightTree) {
                yield return item;
            }
        }
    }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
        throw new NotImplementedException();
    }
}

class Employee : IComparable<Employee> {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Department { get; set; }
    public int Id { get; set; }

    public override string ToString() {
        return String.Format("Id: {0}, Name: {1} {2}, Dept: {3}", this.Id, this.FirstName, this.LastName, this.Department);
    }
    int IComparable<Employee>.CompareTo(Employee other) {
        if (other == null)
            return 1;

        if (this.Id > other.Id)
            return 1;

        if (this.Id < other.Id)
            return -1;

        return 0;
    }
}

class Program {
    static void Main() {
        Tree<Employee> empTree = new Tree<Employee>(new Employee { Id = 1, FirstName = "Janet", LastName = "Gates", Department = "IT" });
        empTree.Insert(new Employee { Id = 2, FirstName = "O", LastName = "G", Department = "Marketing" });
        empTree.Insert(new Employee { Id = 4, FirstName = "K", LastName = "H", Department = "IT" });
        empTree.Insert(new Employee { Id = 6, FirstName = "L", LastName = "H", Department = "Sales" });
        empTree.Insert(new Employee { Id = 3, FirstName = "E", LastName = "L", Department = "Sales" });
        empTree.Insert(new Employee { Id = 5, FirstName = "D", LastName = "L", Department = "Marketing" });

        var ITEmployees = empTree.Where(e => String.Equals(e.Department, "IT")).Select(emp => emp);

        foreach (var emp in ITEmployees)
            Console.WriteLine(emp);
    }
}








22.3.Query
22.3.1.Query Expression
22.3.2.Chaining Query Operators/extracts all strings containing the letter 'a', sorts them by length, and then converts the results to uppercase
22.3.3.Use Contains, Length and ToUpper from Linq
22.3.4.Use select to retrieve all nodes in a Binary tree
22.3.5.Get Distinct departments with condition
22.3.6.Use LINQ to get Employees in the IT department from a tree
22.3.7.Use from where select to choose the Employees in the IT department from a tree
22.3.8.All employees in a tree are grouped by department
22.3.9.ArrayList Query
22.3.10.Complex Query Using Method Syntax
22.3.11.group query
22.3.12.query with extension methods
22.3.13.Join Query
22.3.14.Conduct query on the result again
22.3.15.Use a LINQ query to find the public enums
22.3.16.Define the query using IndexArray first.
22.3.17.Define the query using two from keywords.
22.3.18.Using Linq to get all methods