C#學習筆記【十】——LINQ

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            var masterList = new List<MartialArtsMaster>()
            {
                new MartialArtsMaster(){ Id = 1, Name = "黃蓉",    Age = 18, Menpai = "丐幫", Kungfu = "打狗				棒法",  Level = 9  },
                new MartialArtsMaster(){ Id = 2, Name = "洪七公",  Age = 70, Menpai = "丐幫", Kungfu = "打狗				棒法",  Level = 10 },
                new MartialArtsMaster(){ Id = 3, Name = "郭靖",    Age = 22, Menpai = "丐幫", Kungfu = "降龍				十八掌",Level = 10 },
                new MartialArtsMaster(){ Id = 4, Name = "任我行",  Age = 50, Menpai = "明教", Kungfu = "葵花				寶典",  Level = 1  },
                new MartialArtsMaster(){ Id = 5, Name = "東方不敗",Age = 35, Menpai = "明教", Kungfu = "葵花				寶典",  Level = 10 },
                new MartialArtsMaster(){ Id = 6, Name = "林平之",  Age = 23, Menpai = "華山", Kungfu = "葵花				寶典",  Level = 7  },
                new MartialArtsMaster(){ Id = 7, Name = "嶽不羣",  Age = 50, Menpai = "華山", Kungfu = "葵花				寶典",  Level = 8  },
                new MartialArtsMaster() { Id = 8, Name = "令狐沖", Age = 23, Menpai = "華山", Kungfu = "獨孤				九劍", Level = 10 },
                new MartialArtsMaster() { Id = 9, Name = "梅超風", Age = 23, Menpai = "桃花島", Kungfu = "九				陰真經", Level = 8 },
                new MartialArtsMaster() { Id =10, Name = "黃藥師", Age = 23, Menpai = "梅花島", Kungfu = "彈				指神通", Level = 10 },
                new MartialArtsMaster() { Id = 11, Name = "風清揚", Age = 23, Menpai = "華山", Kungfu = "獨				孤九劍", Level = 10 }
            };
            //初始化武學
            var kungfuList = new List<Kungfu>()
            {
                new Kungfu(){KungfuId=1, KungfuName="打狗棒法", KungfuPower=90},
                new Kungfu(){KungfuId=2, KungfuName="降龍十八掌", KungfuPower=95},
                new Kungfu(){KungfuId=3, KungfuName="葵花寶典", KungfuPower=100},
                new Kungfu() { KungfuId=  4, KungfuName = "獨孤九劍", KungfuPower = 100 },
                new Kungfu() { KungfuId = 5, KungfuName = "九陰真經", KungfuPower = 100 },
                new Kungfu() { KungfuId = 6, KungfuName = "彈指神通", KungfuPower = 100 }
            };
        }
    }
}

10.1 過濾操作符

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            //初始化武學
           
            //查詢所有武學級別大於8的武林高手
            //使用LINQ查詢
		   //1.表達式寫法
            var res1 = from m in masterList//from後面設置查詢的集合
                      where m.Level > 8 && m.Menpai=="丐幫"//where後接查詢的條件,&&接並列的條件
                      //select m;//表示m的結果集合返回
                      select m.Name;
            foreach(var temp in res1)
            {
                Console.WriteLine(temp);
            }
            //2.擴展方法寫法
            //var res2 = masterList.Where(Text1);
            var res2 = masterList.Where(m=>m.Level>8&&m.Menpai=="丐幫");//擴展方法習慣寫爲匿名方法(用Lambda表達式表示)
            foreach (var temp in res2)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }

        static bool Text1(MartialArtsMaster master)
        {
            if (master.Level > 8) return true;
            else return false;
        }
    }
}

10.2 投影操作符

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            //初始化武學

            //3.LINQ聯合查詢
            var res3 = from m in masterList
                       from k in kungfuList
                           //select new { master = m, kungfu = k };
                       where m.Kungfu == k.KungfuName && k.KungfuPower > 90
                       select m;
            foreach (var temp in res3)
            {
                Console.WriteLine(temp);
            }
            //4.LINQ聯合查詢擴展方法
            var res4 = masterList.SelectMany(m => kungfuList, (m, k) => new { master = m, kungfu = k })
                .Where(x => x.master.Kungfu == x.kungfu.KungfuName && x.kungfu.KungfuPower > 90);
            foreach (var temp in res4)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
    }
}

10.3 排序操作符

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            //初始化武學

            //5.對查詢結果進行排序
            //表達式寫法
            var res5 = from m in masterList
                       where m.Level > 8 && m.Menpai == "丐幫"
                       //orderby m.Age//從小到大
                       //orderby m.Age descending//倒序排序
                       orderby m.Level,m.Age//按照多個字段進行排序,若字段屬性相同,就按照下一個字段的屬性排										//序
                       select m;
            foreach (var temp in res5)
            {
                //Console.WriteLine(temp);
            }
            //擴展方法寫法
            //var res6 = masterList.Where(m => m.Level > 8 && m.Menpai == "丐幫").OrderBy(m => m.Name);
            //var res6 = masterList.Where(m => m.Level > 8 && m.Menpai == "丐幫").OrderBy(m => 						m.Level).OrderBy(m=>m.Name)//這樣會先按Level排序,再按Name重新排序
            var res6 = masterList.Where(m => m.Level > 8 && m.Menpai == "丐幫").OrderBy(m => 						m.Level).ThenBy(m => m.Name)//按照多個字段進行排序,若字段屬性相同,就按照下一個字段的屬性排序
            foreach (var temp in res6)
            {
                //Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
    }
}

10.4 連接操作符

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            //初始化武學

            //6.join on集合聯合
            var res7 = from m in masterList
                       join k in kungfuList
                       on m.Kungfu equals k.KungfuName
                       where k.KungfuPower > 90
                       select new { master = m, kungfu = k };
        }
    }
}

10.5 分組操作符

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            //初始化武學

            //查詢每種功法的修行人數
            //7.into groups分組查詢
            //分組後可以得到每種功法的屬性
            var res8 = from k in kungfuList
                       join m in masterList on k.KungfuName equals m.Kungfu
                       into groups
                       orderby groups.Count()
                       select new { kungfu = k, count = groups.Count() };
            foreach (var temp in res8)
            {
                //Console.WriteLine(temp);
            }
            //8.group by按照自身的字段分組
            //得不到每種功法的屬性
            var res9 = from m in masterList
                       group m by m.Menpai into g
                       select new { count = g.Count(), key = g.Key };//g.key key表示按照哪個屬性分組
            foreach (var temp in res9)
            {
                Console.WriteLine(temp);
            }
        }
    }
}

10.6 量詞操作符

namespace c_sharp_practice05
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            //初始化武學

            //9.any,all量詞操作符,判斷集合中是否有滿足某個條件的屬性
            bool res10 = masterList.Any(m => m.Menpai == "丐幫");//至少一個滿足條件返回true
            bool res11 = masterList.All(m => m.Menpai == "明教");//所有都滿足條件返回true
            Console.ReadKey();
        }
    }
}

10.7 分區操作符

10.8 集合操作符

10.9 元素操作符

10.10 合計操作符

10.11 轉換操作符

10.12 生成操作符

10.13 LINQ to Objects的延遲計算

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