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();
        }
    }
}








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