A16_Linq查詢表達式

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

namespace A16_LinqQueryExpression
{
    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public int Levelnum { get; set; }

        public Employee(int id, string name, int age, int levelnum)
        {
            ID = id;
            Name = name;
            Age = age;
            Levelnum = levelnum;
        }

        public override string ToString()
        {
            return string.Format("ID = {0}  Name = {1}  Age = {2}  Levelnum = {3}", ID, Name, Age, Levelnum);
        }
    }
}


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

namespace A16_LinqQueryExpression
{
    public class EmpLevel
    {
        public int ID { get; set; }
        public int LevelNum { get; set; }
        public string LevelName { get; set; }
        public float Salary { get; set; }

        public EmpLevel(int id, int levelnum, string levelname, float salary)
        {
            ID = id;
            LevelNum = levelnum;
            LevelName = levelname;
            Salary = salary;
        }

        public override string ToString()
        {
            return string.Format("ID = {0}  LevelNum = {1}  LevelName = {2}  Salary = {3}", ID, LevelNum, LevelName, Salary);
        }

    }

}


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

namespace A16_LinqQueryExpression
{
    class Demo1
    {

        List<Employee> empArray = new List<Employee>();
        List<EmpLevel> empLeArray = new List<EmpLevel>();
        List<Employee> empQueryArray = new List<Employee>();

        public Demo1()
        {
            empLeArray = new List<EmpLevel>();
            empArray = new List<Employee>();
            empQueryArray = new List<Employee>();

            //集合信息,初始化數據(僱員信息)
            empArray.Add(new Employee(1, "姜  文", 40, 4));
            empArray.Add(new Employee(2, "馮小剛", 50, 5));
            empArray.Add(new Employee(3, "張藝謀", 60, 6));
            empArray.Add(new Employee(4, "王寶強", 35, 3));
            empArray.Add(new Employee(5, "范冰冰", 30, 3));
            empArray.Add(new Employee(6, "李冰冰", 29, 2));
            empArray.Add(new Employee(7, "李一凡", 20, 1));

            //初始化僱員級別信息
            empLeArray.Add(new EmpLevel(1, 1, "T1-1", 5000F));
            empLeArray.Add(new EmpLevel(2, 2, "T1-2", 8000F));
            empLeArray.Add(new EmpLevel(3, 3, "T1-3", 10000F));
            empLeArray.Add(new EmpLevel(4, 4, "T2-1", 15000F));
            empLeArray.Add(new EmpLevel(5, 5, "T2-2", 20000F));
            empLeArray.Add(new EmpLevel(6, 6, "T3-1", 30000F));


        }

        
        //傳統查詢:查詢Level級別大於2的所有公司僱員
        public void Test1()
        {
            foreach (Employee emp in empArray)
            {
                if (emp.Levelnum > 2)
                {
                    empQueryArray.Add(emp);
                }
            }

            foreach (Employee emp in empQueryArray)
            {
                Console.WriteLine(emp.ToString());
            }
        }


        //使用Linq進行查詢Level級別大於2的所有公司僱員
        public void Test2()
        {
            var result = from m in empArray
                         where m.Levelnum > 2 && m.Age >= 50
                         select m;

            foreach (var item in result)
            {
                Console.WriteLine(item.ToString());
            }
        }

        static void Main1(string[] args)
        {
            Demo1 obj = new Demo1();
            //obj.Test1();
            obj.Test2();
        }
    }
}


//C#擴展方法:給已經定義好的類,添加新的方法
//只有靜態類才能添加擴展方法
//擴展方法必須是靜態的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A16_LinqQueryExpression
{
    static class Demo3
    {
        public static void Test1()
        {
            string str = "Hello Everyone";
            string strResult = str.TestMethod();
            string strResult2 = str.TestMethod("hahaha");
            Console.WriteLine(strResult);
            Console.WriteLine(strResult2);
        }

        //無參擴展方法
        public static string TestMethod(this string name)
        {
            return name + "Good morning";
        }

        //有一個參數的擴展方法
        public static string TestMethod(this string name, string para)
        {
            return name + "Good morning" + para;
        }

        static void Main1(string[] args)
        {
            Demo3.Test1();
        }
    }
}

//Linq的擴展方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A16_LinqQueryExpression
{
    class Demo4
    {
        List<Employee> empArray = new List<Employee>();
        List<EmpLevel> empLeArray = new List<EmpLevel>();
        List<Employee> empQueryArray = new List<Employee>();

        public Demo4()
        {
            empLeArray = new List<EmpLevel>();
            empArray = new List<Employee>();
            empQueryArray = new List<Employee>();

            //集合信息,初始化數據(僱員信息)
            empArray.Add(new Employee(1, "姜  文", 40, 3));
            empArray.Add(new Employee(2, "馮小剛", 50, 5));
            empArray.Add(new Employee(3, "張藝謀", 60, 6));
            empArray.Add(new Employee(4, "王寶強", 35, 3));
            empArray.Add(new Employee(5, "范冰冰", 30, 3));
            empArray.Add(new Employee(6, "李冰冰", 29, 2));
            empArray.Add(new Employee(7, "李一凡", 20, 2));

            //初始化僱員級別信息
            empLeArray.Add(new EmpLevel(1, 1, "T1-1", 5000F));
            empLeArray.Add(new EmpLevel(2, 2, "T1-2", 8000F));
            empLeArray.Add(new EmpLevel(3, 3, "T1-3", 10000F));
            empLeArray.Add(new EmpLevel(4, 4, "T2-1", 15000F));
            empLeArray.Add(new EmpLevel(5, 5, "T2-2", 20000F));
            empLeArray.Add(new EmpLevel(6, 6, "T3-1", 30000F));


        }

        //使用Linq的擴展方法,查詢等級大於2的僱員信息
        public void Test1()
        {
            //使用擴展方法1
            //var result = empArray.Where(FilterConditionMethod);
            //使用擴展方法2 lambda表達式
            var result = empArray.Where(a => a.Levelnum > 2);
            foreach (var item in result)
            {
                Console.WriteLine(item.ToString());
            }
        }
        /*
        private bool FilterConditionMethod(Employee emp)
        {
            if (emp.Levelnum > 2)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        */

        //聯合查詢 查詢兩個集合的並集
        public void Test2()
        {
            /*
            var queryResult = from e in empArray
                              from l in empLeArray
                              select new { e, l }; //輸出兩個集合的並集
            */

            //查詢出所有大於3級的信息
            /*
            var queryResult = from e in empArray
                              from l in empLeArray
                              where e.Levelnum == l.LevelNum && e.Levelnum > 3
                              select new { e, l }; //輸出兩個集合的並集
            */
            //輸出所有大於三級的僱員姓名、級別、工資
            var queryResult = from e in empArray
                              from l in empLeArray
                              where e.Levelnum == l.LevelNum && e.Levelnum > 3
                              select new { e.Name, l.LevelName, l.Salary }; //輸出兩個集合的並集

            foreach (var item in queryResult)
            {
                //Console.WriteLine(item.ToString());
                Console.WriteLine("姓名 = {0}  級別 = {1}  工資 = {2}",item.Name, item.LevelName, item.Salary);
            }
        }

        //排序
        public void Test3()
        { 
            //輸出所有大於1級的僱員姓名、級別、工資 且根據姓名,級別和年齡進行排序
            var queryResult = from e in empArray
                              from l in empLeArray
                              where e.Levelnum == l.LevelNum && e.Levelnum > 1
                              orderby e.Levelnum, e.Name, e.Age //descending 降序關鍵字 //排序語句
                              select new { e.Name, l.LevelName, l.Salary }; //輸出兩個集合的並集

            foreach (var item in queryResult)
            {
                //Console.WriteLine(item.ToString());
                Console.WriteLine("姓名 = {0}  級別 = {1}  工資 = {2}",item.Name, item.LevelName, item.Salary);
            }
        }

        //Join On關鍵字 聯合查詢
        public void Test4()
        {
            var queryResult = from e in empArray
                              join l in empLeArray
                              on e.Levelnum equals l.LevelNum
                              where e.Levelnum > 2 && l.Salary > 20000
                              select new {e,l};

            foreach (var item in queryResult)
            {
                Console.WriteLine("名稱 = "+item.e.Name + "  " + "級別 = " + item.l.LevelName);
            }
        }

        //Group by 分組關鍵字
        public void Test5()
        { 
            //查詢僱員集合中,按照級別分組,統計每個級別有多少人
            var queryResult = from e in empArray
                              group e by e.Levelnum into g //分組結果爲g
                              select new { g.Key, counts = g.Count() };

            foreach (var item in queryResult)
            {
                Console.WriteLine("級別:"+item.Key+"  "+"數量:"+item.counts);
            }
        }

        //any關鍵字:至少有一個符合條件
        //all關鍵字:全都滿足條件
        public void Test6()
        {
            bool boolResult = empArray.Any(m => m.Name == "王寶強");
            Console.WriteLine("是否有一個或以上個員工叫“王寶強”:" + boolResult);
        }

        public void Test7()
        {
            bool boolResult = empArray.All(m => m.Name == "王寶強");
            Console.WriteLine("是否有所有員工都叫“王寶強”:" + boolResult);
        }

        static void Main(string[] args)
        {
            Demo4 obj = new Demo4();
            //obj.Test1();
            //obj.Test2();
            //obj.Test3();
            //obj.Test5();
            obj.Test6();
            obj.Test7();
        }
    }
}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章