<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FLINQ%2FQuery</id>
		<title>Csharp/CSharp Tutorial/LINQ/Query - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FLINQ%2FQuery"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/LINQ/Query&amp;action=history"/>
		<updated>2026-04-29T16:34:06Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/LINQ/Query&amp;diff=6158&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/LINQ/Query&amp;diff=6158&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/LINQ/Query&amp;diff=6159&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/LINQ/Query&amp;diff=6159&amp;oldid=prev"/>
				<updated>2010-05-26T12:18:26Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==All employees in a tree are grouped by department==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
public class Tree&amp;lt;TreeNode&amp;gt; : IEnumerable&amp;lt;TreeNode&amp;gt; where TreeNode : IComparable&amp;lt;TreeNode&amp;gt; {&lt;br /&gt;
    public Tree(TreeNode nodeValue) {&lt;br /&gt;
        this.NodeData = nodeValue;&lt;br /&gt;
        this.LeftTree = null;&lt;br /&gt;
        this.RightTree = null;&lt;br /&gt;
    }&lt;br /&gt;
    public void Insert(TreeNode newItem) {&lt;br /&gt;
        TreeNode currentNodeValue = this.NodeData;&lt;br /&gt;
        if (currentNodeValue.rupareTo(newItem) &amp;gt; 0) {&lt;br /&gt;
            if (this.LeftTree == null) {&lt;br /&gt;
                this.LeftTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.LeftTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (this.RightTree == null) {&lt;br /&gt;
                this.RightTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.RightTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void WalkTree() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            this.LeftTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(this.NodeData.ToString());&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            this.RightTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public TreeNode NodeData { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; LeftTree { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; RightTree { get; set; }&lt;br /&gt;
&lt;br /&gt;
    IEnumerator&amp;lt;TreeNode&amp;gt; IEnumerable&amp;lt;TreeNode&amp;gt;.GetEnumerator() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.LeftTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        yield return this.NodeData;&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.RightTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Employee : IComparable&amp;lt;Employee&amp;gt; {&lt;br /&gt;
    public string FirstName { get; set; }&lt;br /&gt;
    public string LastName { get; set; }&lt;br /&gt;
    public string Department { get; set; }&lt;br /&gt;
    public int Id { get; set; }&lt;br /&gt;
    public override string ToString() {&lt;br /&gt;
        return String.Format(&amp;quot;Id: {0}, Name: {1} {2}, Dept: {3}&amp;quot;, this.Id, this.FirstName, this.LastName, this.Department);&lt;br /&gt;
    }&lt;br /&gt;
    int IComparable&amp;lt;Employee&amp;gt;.rupareTo(Employee other) {&lt;br /&gt;
        if (other == null)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;gt; other.Id)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;lt; other.Id)&lt;br /&gt;
            return -1;&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        Tree&amp;lt;Employee&amp;gt; empTree = new Tree&amp;lt;Employee&amp;gt;(new Employee { Id = 1, FirstName = &amp;quot;Janet&amp;quot;, LastName = &amp;quot;Gates&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 2, FirstName = &amp;quot;O&amp;quot;, LastName = &amp;quot;G&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 4, FirstName = &amp;quot;K&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 6, FirstName = &amp;quot;L&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 3, FirstName = &amp;quot;E&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 5, FirstName = &amp;quot;D&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        var employeesByDept = empTree.GroupBy(e =&amp;gt; e.Department);&lt;br /&gt;
        foreach (var dept in employeesByDept)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(&amp;quot;Department: {0}&amp;quot;, dept.Key);&lt;br /&gt;
            foreach (var emp in dept)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;\t{0} {1}&amp;quot;, emp.FirstName, emp.LastName);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ArrayList Query==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.ruponentModel;&lt;br /&gt;
    public class Product&lt;br /&gt;
    {&lt;br /&gt;
        string name;&lt;br /&gt;
        public string Name&lt;br /&gt;
        {&lt;br /&gt;
            get { return name; }&lt;br /&gt;
        }&lt;br /&gt;
        decimal price;&lt;br /&gt;
        public decimal Price&lt;br /&gt;
        {&lt;br /&gt;
            get { return price; }&lt;br /&gt;
        }&lt;br /&gt;
        public Product(string name, decimal price)&lt;br /&gt;
        {&lt;br /&gt;
            this.name = name;&lt;br /&gt;
            this.price = price;&lt;br /&gt;
        }&lt;br /&gt;
        public static ArrayList GetSampleProducts()&lt;br /&gt;
        {&lt;br /&gt;
            ArrayList list = new ArrayList();&lt;br /&gt;
            list.Add(new Product(&amp;quot;C&amp;quot;, 9.99m));&lt;br /&gt;
            list.Add(new Product(&amp;quot;A&amp;quot;, 1.99m));&lt;br /&gt;
            list.Add(new Product(&amp;quot;F&amp;quot;, 2.99m));&lt;br /&gt;
            list.Add(new Product(&amp;quot;S&amp;quot;, 3.99m));&lt;br /&gt;
            return list;&lt;br /&gt;
        }&lt;br /&gt;
        public override string ToString()&lt;br /&gt;
        {&lt;br /&gt;
            return string.Format(&amp;quot;{0}: {1}&amp;quot;, name, price);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class ArrayListQuery&lt;br /&gt;
    {&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            ArrayList products = Product.GetSampleProducts();&lt;br /&gt;
            foreach (Product product in products)&lt;br /&gt;
            {&lt;br /&gt;
                if (product.Price &amp;gt; 10m)&lt;br /&gt;
                {&lt;br /&gt;
                    Console.WriteLine(product);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Chaining Query Operators/extracts all strings containing the letter &amp;quot;a&amp;quot;, sorts them by length, and then converts the results to uppercase==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
class LinqDemo {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        string[] names = { &amp;quot;J&amp;quot;, &amp;quot;P&amp;quot;, &amp;quot;G&amp;quot;, &amp;quot;P&amp;quot; };&lt;br /&gt;
        IEnumerable&amp;lt;string&amp;gt; query = names&lt;br /&gt;
          .Where(n =&amp;gt; n.Contains(&amp;quot;a&amp;quot;))&lt;br /&gt;
          .OrderBy(n =&amp;gt; n.Length)&lt;br /&gt;
          .Select(n =&amp;gt; n.ToUpper());&lt;br /&gt;
        foreach (string name in query) Console.Write(name + &amp;quot;|&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Complex Query Using Method Syntax==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
    public class Customer&lt;br /&gt;
    {&lt;br /&gt;
        public string FirstName    { get; set; }&lt;br /&gt;
        public string LastName     { get; set; }&lt;br /&gt;
        public string EmailAddress { get; set; }&lt;br /&gt;
        public override string ToString(){&lt;br /&gt;
            return string.Format(&amp;quot;{0} {1}\nEmail:   {2}&amp;quot;,FirstName, LastName, EmailAddress);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public class Address&lt;br /&gt;
    {&lt;br /&gt;
        public string Name   { get; set; }&lt;br /&gt;
        public string Street { get; set; }&lt;br /&gt;
        public string City   { get; set; }&lt;br /&gt;
        public override string ToString()&lt;br /&gt;
        {&lt;br /&gt;
            return string.Format(&amp;quot;{0}, {1}&amp;quot;, Street, City);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public class Tester&lt;br /&gt;
    {&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;Customer&amp;gt; customers = new List&amp;lt;Customer&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;A&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;B&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;o@a.ru&amp;quot;},&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;B&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;C&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;k@a.ru&amp;quot; },&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;D&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;C&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;d@a.ru&amp;quot; },&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;F&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;G&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;j@a.ru&amp;quot; },&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;L&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;H&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;l@a.ru&amp;quot; }&lt;br /&gt;
                };&lt;br /&gt;
            List&amp;lt;Address&amp;gt; addresses = new List&amp;lt;Address&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                    new Address { Name   = &amp;quot;J&amp;quot;,&lt;br /&gt;
                                  Street = &amp;quot;165 Main&amp;quot;, &lt;br /&gt;
                                    City = &amp;quot;City 1&amp;quot; },&lt;br /&gt;
                    new Address { Name   = &amp;quot;K H&amp;quot;,&lt;br /&gt;
                                  Street = &amp;quot;3207 Way&amp;quot;, &lt;br /&gt;
                                    City = &amp;quot;Cith 2&amp;quot; },&lt;br /&gt;
                    new Address { Name   = &amp;quot;J G&amp;quot;,&lt;br /&gt;
                                  Street = &amp;quot;800 Blvd.&amp;quot;, &lt;br /&gt;
                                    City = &amp;quot;City 3&amp;quot; },&lt;br /&gt;
                    new Address { Name   = &amp;quot;Mary&amp;quot;,&lt;br /&gt;
                                  Street = &amp;quot;7 Ave&amp;quot;, &lt;br /&gt;
                                    City = &amp;quot;City 4&amp;quot; },&lt;br /&gt;
                    new Address { Name   = &amp;quot;Kate&amp;quot;,&lt;br /&gt;
                                  Street = &amp;quot;2251 Avenue&amp;quot;, &lt;br /&gt;
                                    City = &amp;quot;City 5&amp;quot; }&lt;br /&gt;
                };&lt;br /&gt;
            var result = customers.Join(addresses,&lt;br /&gt;
                        customer =&amp;gt; string.Format(&amp;quot;{0} {1}&amp;quot;, customer.FirstName, customer.LastName),&lt;br /&gt;
                        address =&amp;gt; address.Name,&lt;br /&gt;
                        (customer, address) =&amp;gt; new { Customer = customer, Address = address })&lt;br /&gt;
                        .OrderBy(ca =&amp;gt; ca.Customer.LastName)&lt;br /&gt;
                        .ThenByDescending(ca =&amp;gt; ca.Address.Street);&lt;br /&gt;
            foreach (var ca in result)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(string.Format(&amp;quot;{0}\nAddress: {1}&amp;quot;,ca.Customer, ca.Address));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conduct query on the result again==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
&lt;br /&gt;
    class Customer&lt;br /&gt;
    {&lt;br /&gt;
        public string ID { get; set; }&lt;br /&gt;
        public string City { get; set; }&lt;br /&gt;
        public string Country { get; set; }&lt;br /&gt;
        public string Region { get; set; }&lt;br /&gt;
        public decimal Sales { get; set; }&lt;br /&gt;
    }&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;Customer&amp;gt; customers = new List&amp;lt;Customer&amp;gt; {&lt;br /&gt;
              new Customer { ID=&amp;quot;Q&amp;quot;, City=&amp;quot;London&amp;quot;, Country=&amp;quot;UK&amp;quot;, Region=&amp;quot;Europe&amp;quot;, Sales=8000 },&lt;br /&gt;
              new Customer { ID=&amp;quot;R&amp;quot;, City=&amp;quot;Beijing&amp;quot;, Country=&amp;quot;China&amp;quot;, Region=&amp;quot;Asia&amp;quot;, Sales=9000 },&lt;br /&gt;
              new Customer { ID=&amp;quot;T&amp;quot;, City=&amp;quot;Lima&amp;quot;, Country=&amp;quot;Peru&amp;quot;, Region=&amp;quot;South America&amp;quot;, Sales=2002 }&lt;br /&gt;
           };&lt;br /&gt;
            var queryResults =&lt;br /&gt;
                from c in customers&lt;br /&gt;
                group c by c.Region into cg&lt;br /&gt;
                select new { TotalSales = cg.Sum(c =&amp;gt; c.Sales), Region = cg.Key }&lt;br /&gt;
               ;&lt;br /&gt;
            var orderedResults =&lt;br /&gt;
                from cg in queryResults&lt;br /&gt;
                orderby cg.TotalSales descending&lt;br /&gt;
                select cg&lt;br /&gt;
             ;&lt;br /&gt;
            foreach (var item in orderedResults)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(item.TotalSales + &amp;quot;\t: &amp;quot; + item.Region);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get Distinct departments with condition==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
public class Tree&amp;lt;TreeNode&amp;gt; : IEnumerable&amp;lt;TreeNode&amp;gt; where TreeNode : IComparable&amp;lt;TreeNode&amp;gt; {&lt;br /&gt;
    public Tree(TreeNode nodeValue) {&lt;br /&gt;
        this.NodeData = nodeValue;&lt;br /&gt;
        this.LeftTree = null;&lt;br /&gt;
        this.RightTree = null;&lt;br /&gt;
    }&lt;br /&gt;
    public void Insert(TreeNode newItem) {&lt;br /&gt;
        TreeNode currentNodeValue = this.NodeData;&lt;br /&gt;
        if (currentNodeValue.rupareTo(newItem) &amp;gt; 0) {&lt;br /&gt;
            if (this.LeftTree == null) {&lt;br /&gt;
                this.LeftTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.LeftTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (this.RightTree == null) {&lt;br /&gt;
                this.RightTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.RightTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void WalkTree() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            this.LeftTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(this.NodeData.ToString());&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            this.RightTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public TreeNode NodeData { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; LeftTree { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; RightTree { get; set; }&lt;br /&gt;
&lt;br /&gt;
    IEnumerator&amp;lt;TreeNode&amp;gt; IEnumerable&amp;lt;TreeNode&amp;gt;.GetEnumerator() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.LeftTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        yield return this.NodeData;&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.RightTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Employee : IComparable&amp;lt;Employee&amp;gt; {&lt;br /&gt;
    public string FirstName { get; set; }&lt;br /&gt;
    public string LastName { get; set; }&lt;br /&gt;
    public string Department { get; set; }&lt;br /&gt;
    public int Id { get; set; }&lt;br /&gt;
    public override string ToString() {&lt;br /&gt;
        return String.Format(&amp;quot;Id: {0}, Name: {1} {2}, Dept: {3}&amp;quot;, this.Id, this.FirstName, this.LastName, this.Department);&lt;br /&gt;
    }&lt;br /&gt;
    int IComparable&amp;lt;Employee&amp;gt;.rupareTo(Employee other) {&lt;br /&gt;
        if (other == null)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;gt; other.Id)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;lt; other.Id)&lt;br /&gt;
            return -1;&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        Tree&amp;lt;Employee&amp;gt; empTree = new Tree&amp;lt;Employee&amp;gt;(new Employee { Id = 1, FirstName = &amp;quot;Janet&amp;quot;, LastName = &amp;quot;Gates&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 2, FirstName = &amp;quot;O&amp;quot;, LastName = &amp;quot;G&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 4, FirstName = &amp;quot;K&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 6, FirstName = &amp;quot;L&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 3, FirstName = &amp;quot;E&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 5, FirstName = &amp;quot;D&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        var depts = empTree.Select(d =&amp;gt; d.Department).Distinct();&lt;br /&gt;
        foreach (var dept in depts)&lt;br /&gt;
            Console.WriteLine(&amp;quot;Department: {0}&amp;quot;, dept);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Join Query==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
    class Customer&lt;br /&gt;
    {&lt;br /&gt;
        public string ID { get; set; }&lt;br /&gt;
        public string City { get; set; }&lt;br /&gt;
        public string Country { get; set; }&lt;br /&gt;
        public string Region { get; set; }&lt;br /&gt;
        public decimal Sales { get; set; }&lt;br /&gt;
    }&lt;br /&gt;
    class Order&lt;br /&gt;
    {&lt;br /&gt;
        public string ID { get; set; }&lt;br /&gt;
        public decimal Amount { get; set; }&lt;br /&gt;
    }&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;Order&amp;gt; orders = new List&amp;lt;Order&amp;gt; {&lt;br /&gt;
              new Order { ID=&amp;quot;X&amp;quot;, Amount=900 },&lt;br /&gt;
              new Order { ID=&amp;quot;Y&amp;quot;, Amount=1000 },&lt;br /&gt;
              new Order { ID=&amp;quot;Z&amp;quot;, Amount=1100 }&lt;br /&gt;
            };&lt;br /&gt;
            List&amp;lt;Customer&amp;gt; customers = new List&amp;lt;Customer&amp;gt; {&lt;br /&gt;
              new Customer { ID=&amp;quot;X&amp;quot;, City=&amp;quot;Beijing&amp;quot;, Country=&amp;quot;China&amp;quot;, Region=&amp;quot;Asia&amp;quot;, Sales=9000 },&lt;br /&gt;
              new Customer { ID=&amp;quot;Y&amp;quot;, City=&amp;quot;Bogot&amp;amp;aacute;&amp;quot;, Country=&amp;quot;Colombia&amp;quot;, Region=&amp;quot;South America&amp;quot;, Sales=1001 },&lt;br /&gt;
              new Customer { ID=&amp;quot;Z&amp;quot;, City=&amp;quot;Lima&amp;quot;, Country=&amp;quot;Peru&amp;quot;, Region=&amp;quot;South America&amp;quot;, Sales=2002 }&lt;br /&gt;
           };&lt;br /&gt;
            var queryResults =&lt;br /&gt;
               from c in customers&lt;br /&gt;
               join o in orders on c.ID equals o.ID&lt;br /&gt;
               select new { c.ID, c.City, SalesBefore = c.Sales, NewOrder = o.Amount, SalesAfter = c.Sales+o.Amount };&lt;br /&gt;
            foreach (var item in queryResults)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(item);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==query with extension methods==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
    public class Customer&lt;br /&gt;
    {&lt;br /&gt;
        public string FirstName { get; set; }&lt;br /&gt;
        public string LastName { get; set; }&lt;br /&gt;
        public string EmailAddress { get; set; }&lt;br /&gt;
        public override string ToString()&lt;br /&gt;
        {&lt;br /&gt;
            return string.Format(&amp;quot;{0} {1}\nEmail:   {2}&amp;quot;,FirstName, LastName, EmailAddress);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public class Tester&lt;br /&gt;
    {&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;Customer&amp;gt; customers = new List&amp;lt;Customer&amp;gt;{&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;A&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;B&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;o@a.ru&amp;quot;},&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;B&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;C&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;k@a.ru&amp;quot; },&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;D&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;C&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;d@a.ru&amp;quot; },&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;F&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;G&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;j@a.ru&amp;quot; },&lt;br /&gt;
                    new Customer { FirstName = &amp;quot;L&amp;quot;, &lt;br /&gt;
                                    LastName = &amp;quot;H&amp;quot;,&lt;br /&gt;
                                    EmailAddress = &amp;quot;l@a.ru&amp;quot; }&lt;br /&gt;
                };&lt;br /&gt;
            IEnumerable&amp;lt;Customer&amp;gt; result = customers.Where(customer =&amp;gt; customer.FirstName == &amp;quot;Donna&amp;quot;);&lt;br /&gt;
            foreach (Customer customer in result)&lt;br /&gt;
                Console.WriteLine(customer.ToString());&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use a LINQ query to find the public enums==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
  public class MainClass&lt;br /&gt;
  {&lt;br /&gt;
    static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
      string displayName = null;&lt;br /&gt;
      displayName = &amp;quot;System.Windows.Forms,Version=2.0.0.0,PublicKeyToken=b77a5c561934e089,Culture=\&amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
      Assembly a = Assembly.Load(displayName);&lt;br /&gt;
      Type[] types = a.GetTypes();&lt;br /&gt;
      var publicEnums = from pe in types where pe.IsEnum &amp;amp;&amp;amp; pe.IsPublic select pe;&lt;br /&gt;
      foreach (var pe in publicEnums)&lt;br /&gt;
      {&lt;br /&gt;
        Console.WriteLine(pe);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Contains, Length and ToUpper from Linq==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        string[] names = { &amp;quot;Tom&amp;quot;, &amp;quot;Dick&amp;quot;, &amp;quot;Harry&amp;quot;, &amp;quot;Mary&amp;quot;, &amp;quot;Jay&amp;quot; };&lt;br /&gt;
        IEnumerable&amp;lt;string&amp;gt; filtered = names.Where(n =&amp;gt; n.Contains(&amp;quot;a&amp;quot;));&lt;br /&gt;
        IEnumerable&amp;lt;string&amp;gt; sorted = filtered.OrderBy(n =&amp;gt; n.Length);&lt;br /&gt;
        IEnumerable&amp;lt;string&amp;gt; finalQuery = sorted.Select(n =&amp;gt; n.ToUpper());&lt;br /&gt;
        foreach (string name in filtered)&lt;br /&gt;
            Console.Write(name + &amp;quot;|&amp;quot;);        &lt;br /&gt;
        Console.WriteLine();&lt;br /&gt;
        foreach (string name in sorted)&lt;br /&gt;
            Console.Write(name + &amp;quot;|&amp;quot;);        &lt;br /&gt;
        Console.WriteLine();&lt;br /&gt;
        foreach (string name in finalQuery)&lt;br /&gt;
            Console.Write(name + &amp;quot;|&amp;quot;);        &lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use from where select to choose the Employees in the IT department from a tree==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
public class Tree&amp;lt;TreeNode&amp;gt; : IEnumerable&amp;lt;TreeNode&amp;gt; where TreeNode : IComparable&amp;lt;TreeNode&amp;gt; {&lt;br /&gt;
    public Tree(TreeNode nodeValue) {&lt;br /&gt;
        this.NodeData = nodeValue;&lt;br /&gt;
        this.LeftTree = null;&lt;br /&gt;
        this.RightTree = null;&lt;br /&gt;
    }&lt;br /&gt;
    public void Insert(TreeNode newItem) {&lt;br /&gt;
        TreeNode currentNodeValue = this.NodeData;&lt;br /&gt;
        if (currentNodeValue.rupareTo(newItem) &amp;gt; 0) {&lt;br /&gt;
            if (this.LeftTree == null) {&lt;br /&gt;
                this.LeftTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.LeftTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (this.RightTree == null) {&lt;br /&gt;
                this.RightTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.RightTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void WalkTree() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            this.LeftTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(this.NodeData.ToString());&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            this.RightTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public TreeNode NodeData { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; LeftTree { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; RightTree { get; set; }&lt;br /&gt;
&lt;br /&gt;
    IEnumerator&amp;lt;TreeNode&amp;gt; IEnumerable&amp;lt;TreeNode&amp;gt;.GetEnumerator() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.LeftTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        yield return this.NodeData;&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.RightTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Employee : IComparable&amp;lt;Employee&amp;gt; {&lt;br /&gt;
    public string FirstName { get; set; }&lt;br /&gt;
    public string LastName { get; set; }&lt;br /&gt;
    public string Department { get; set; }&lt;br /&gt;
    public int Id { get; set; }&lt;br /&gt;
    public override string ToString() {&lt;br /&gt;
        return String.Format(&amp;quot;Id: {0}, Name: {1} {2}, Dept: {3}&amp;quot;, this.Id, this.FirstName, this.LastName, this.Department);&lt;br /&gt;
    }&lt;br /&gt;
    int IComparable&amp;lt;Employee&amp;gt;.rupareTo(Employee other) {&lt;br /&gt;
        if (other == null)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;gt; other.Id)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;lt; other.Id)&lt;br /&gt;
            return -1;&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        Tree&amp;lt;Employee&amp;gt; empTree = new Tree&amp;lt;Employee&amp;gt;(new Employee { Id = 1, FirstName = &amp;quot;Janet&amp;quot;, LastName = &amp;quot;Gates&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 2, FirstName = &amp;quot;O&amp;quot;, LastName = &amp;quot;G&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 4, FirstName = &amp;quot;K&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 6, FirstName = &amp;quot;L&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 3, FirstName = &amp;quot;E&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 5, FirstName = &amp;quot;D&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        var ITEmployees = from e in empTree&lt;br /&gt;
                          where String.Equals(e.Department, &amp;quot;IT&amp;quot;)&lt;br /&gt;
                          select e;&lt;br /&gt;
        foreach (var emp in ITEmployees)&lt;br /&gt;
            Console.WriteLine(emp);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use LINQ to get Employees in the IT department from a tree==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
public class Tree&amp;lt;TreeNode&amp;gt; : IEnumerable&amp;lt;TreeNode&amp;gt; where TreeNode : IComparable&amp;lt;TreeNode&amp;gt; {&lt;br /&gt;
    public Tree(TreeNode nodeValue) {&lt;br /&gt;
        this.NodeData = nodeValue;&lt;br /&gt;
        this.LeftTree = null;&lt;br /&gt;
        this.RightTree = null;&lt;br /&gt;
    }&lt;br /&gt;
    public void Insert(TreeNode newItem) {&lt;br /&gt;
        TreeNode currentNodeValue = this.NodeData;&lt;br /&gt;
        if (currentNodeValue.rupareTo(newItem) &amp;gt; 0) {&lt;br /&gt;
            if (this.LeftTree == null) {&lt;br /&gt;
                this.LeftTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.LeftTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (this.RightTree == null) {&lt;br /&gt;
                this.RightTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.RightTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void WalkTree() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            this.LeftTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(this.NodeData.ToString());&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            this.RightTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public TreeNode NodeData { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; LeftTree { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; RightTree { get; set; }&lt;br /&gt;
&lt;br /&gt;
    IEnumerator&amp;lt;TreeNode&amp;gt; IEnumerable&amp;lt;TreeNode&amp;gt;.GetEnumerator() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.LeftTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        yield return this.NodeData;&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.RightTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Employee : IComparable&amp;lt;Employee&amp;gt; {&lt;br /&gt;
    public string FirstName { get; set; }&lt;br /&gt;
    public string LastName { get; set; }&lt;br /&gt;
    public string Department { get; set; }&lt;br /&gt;
    public int Id { get; set; }&lt;br /&gt;
    public override string ToString() {&lt;br /&gt;
        return String.Format(&amp;quot;Id: {0}, Name: {1} {2}, Dept: {3}&amp;quot;, this.Id, this.FirstName, this.LastName, this.Department);&lt;br /&gt;
    }&lt;br /&gt;
    int IComparable&amp;lt;Employee&amp;gt;.rupareTo(Employee other) {&lt;br /&gt;
        if (other == null)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;gt; other.Id)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;lt; other.Id)&lt;br /&gt;
            return -1;&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        Tree&amp;lt;Employee&amp;gt; empTree = new Tree&amp;lt;Employee&amp;gt;(new Employee { Id = 1, FirstName = &amp;quot;Janet&amp;quot;, LastName = &amp;quot;Gates&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 2, FirstName = &amp;quot;O&amp;quot;, LastName = &amp;quot;G&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 4, FirstName = &amp;quot;K&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 6, FirstName = &amp;quot;L&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 3, FirstName = &amp;quot;E&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 5, FirstName = &amp;quot;D&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        var ITEmployees = empTree.Where(e =&amp;gt; String.Equals(e.Department, &amp;quot;IT&amp;quot;)).Select(emp =&amp;gt; emp);&lt;br /&gt;
        foreach (var emp in ITEmployees)&lt;br /&gt;
            Console.WriteLine(emp);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use select to retrieve all nodes in a Binary tree==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
public class Tree&amp;lt;TreeNode&amp;gt; : IEnumerable&amp;lt;TreeNode&amp;gt; where TreeNode : IComparable&amp;lt;TreeNode&amp;gt; {&lt;br /&gt;
    public Tree(TreeNode nodeValue) {&lt;br /&gt;
        this.NodeData = nodeValue;&lt;br /&gt;
        this.LeftTree = null;&lt;br /&gt;
        this.RightTree = null;&lt;br /&gt;
    }&lt;br /&gt;
    public void Insert(TreeNode newItem) {&lt;br /&gt;
        TreeNode currentNodeValue = this.NodeData;&lt;br /&gt;
        if (currentNodeValue.rupareTo(newItem) &amp;gt; 0) {&lt;br /&gt;
            if (this.LeftTree == null) {&lt;br /&gt;
                this.LeftTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.LeftTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (this.RightTree == null) {&lt;br /&gt;
                this.RightTree = new Tree&amp;lt;TreeNode&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.RightTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void WalkTree() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            this.LeftTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(this.NodeData.ToString());&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            this.RightTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public TreeNode NodeData { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; LeftTree { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TreeNode&amp;gt; RightTree { get; set; }&lt;br /&gt;
&lt;br /&gt;
    IEnumerator&amp;lt;TreeNode&amp;gt; IEnumerable&amp;lt;TreeNode&amp;gt;.GetEnumerator() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.LeftTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        yield return this.NodeData;&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            foreach (TreeNode item in this.RightTree) {&lt;br /&gt;
                yield return item;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Employee : IComparable&amp;lt;Employee&amp;gt; {&lt;br /&gt;
    public string FirstName { get; set; }&lt;br /&gt;
    public string LastName { get; set; }&lt;br /&gt;
    public string Department { get; set; }&lt;br /&gt;
    public int Id { get; set; }&lt;br /&gt;
    public override string ToString() {&lt;br /&gt;
        return String.Format(&amp;quot;Id: {0}, Name: {1} {2}, Dept: {3}&amp;quot;, this.Id, this.FirstName, this.LastName, this.Department);&lt;br /&gt;
    }&lt;br /&gt;
    int IComparable&amp;lt;Employee&amp;gt;.rupareTo(Employee other) {&lt;br /&gt;
        if (other == null)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;gt; other.Id)&lt;br /&gt;
            return 1;&lt;br /&gt;
        if (this.Id &amp;lt; other.Id)&lt;br /&gt;
            return -1;&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        Tree&amp;lt;Employee&amp;gt; empTree = new Tree&amp;lt;Employee&amp;gt;(new Employee { Id = 1, FirstName = &amp;quot;Janet&amp;quot;, LastName = &amp;quot;Gates&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 2, FirstName = &amp;quot;O&amp;quot;, LastName = &amp;quot;G&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 4, FirstName = &amp;quot;K&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;IT&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 6, FirstName = &amp;quot;L&amp;quot;, LastName = &amp;quot;H&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 3, FirstName = &amp;quot;E&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Sales&amp;quot; });&lt;br /&gt;
        empTree.Insert(new Employee { Id = 5, FirstName = &amp;quot;D&amp;quot;, LastName = &amp;quot;L&amp;quot;, Department = &amp;quot;Marketing&amp;quot; });&lt;br /&gt;
        var allEmployees = from e in empTree.ToList&amp;lt;Employee&amp;gt;()&lt;br /&gt;
                           select e;&lt;br /&gt;
        foreach (var emp in allEmployees)&lt;br /&gt;
            Console.WriteLine(emp);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>