1. 程式人生 > >C#高階篇(4)

C#高階篇(4)

1.LINQ語句

建立一個類,在這個類中重寫了ToString方法,在直接列印類的時候列印類中的屬性

class Master
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public override string ToString()
        {
            return string.Format("Id:{0},Name:{1},Age{2}",Id,Name,Age);
        }
    }

在Main函式中使用var型的變數儲存結果,通過from先確定查詢的物件在那個集合,再通過where(&&新增並列條件)確定範圍,最後返回臨時儲存的值

class Program
    {
        static void Main(string[] args)
        {
            var master = new List<Master>()
            {
                new Master() {Id = 1,Name = "HM",Age = 18 },
                new Master() {Id = 2,Name = "HR",Age = 20 },
                new Master() {Id = 3,Name = "CEO",Age = 22 },
            };
            var res = from m in master
                      where m.Age>18
                      select m;
            foreach(var temp in res)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
    }

上面是使用LINQ語句,下面是使用擴充套件方法。拓展方法呼叫Where方法傳遞一個方法,將這個方法將集合中的每一個元素作為引數,返回返回一個bool值,最後將符合的master變數返回。

class Program
    {
        static void Main(string[] args)
        {
            var master = new List<Master>()
            {
                new Master() {Id = 1,Name = "HM",Age = 18 },
                new Master() {Id = 2,Name = "HR",Age = 20 },
                new Master() {Id = 3,Name = "CEO",Age = 22 },
            };
            var res =  master.Where(Test1);

            foreach(var temp in res)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
        static bool Test1(Master master)
        {
            if (master.Age > 18)
            {
                return true;
            }
            else return false;
        }
    }

2.聯合查詢

在查詢的得時候從多個表進行查詢,

eg:a、b表,a中的每一個物件會和b中的每一個物件匹配一邊

拓展方法

var res = master.SelectMany(m => kongfu, (m, k) => new { master = m, kongfu = k })
                .Where(x => x.master.Name == x.kongfu.Name);

3.對結果進行排序

orderby 關鍵字 對關鍵字進行排序,後面加上descending,進行倒敘

4.Join on聯合查詢

將master中name和kongfu中name相同的進行連線

var res = from m in master
                      join k in kongfu on m.Name equals k.Name
                      select new { master1 = m, kongfu1 = k };

5.對結果進行分組操作into groups

var res = from k in kongfu
                      join m in master on k.Name equals m.Name
                      into groups
                      orderby groups.Count()
                      select new { kongfu = k, count = groups.Count() };

通過into進行分組

6.對結果進行分組操作

var res = from m in master
                      group m by m.Age into g
                      select new { count = g.Count(), g.Key };//g.key Key表示是按照那個屬性分的組

7.量詞操作符 any all

bool res1 = master.Any(m => m.Age > 18);

判斷集合中是否滿足某個條件,any是其中有一個滿足條件,返回true。