搜尋網誌內容

2017年4月26日 星期三

LINQ起步走#1查詢順序與查用語法

b為了接下來改往MVC發展,LINQ與EFrameork變成是不可或缺的技術入門
所以從現在開始好好的來練習一下之前一知半解的LINQ

基本查詢
Group (群組)
Join (合併)
OrderBy (排序)
查詢順序

基本查詢
 From  <資料來源> → Where  <查詢條件>  →Select < 資料欄位>
  ex

  var lists = new string[] { "aaa", "ttt", "ccc" };
  var result = from s1 in lists where s1 == "aaa" select s1;

進階查詢
 From  <資料來源>
→ Where  <查詢條件> →Group <群組條件>→JOIN<合併查詢條件>→ ORDER BY <排序條件>
→ Select < 資料欄位>


Group (群組)

person[] persons = new person[]
            {
                new person { name="dad",age=18,add="NY"},
                 new person { name="ccc",age=16,add="TW"},
                  new person { name="zzz",age=16,add="NY"},
                   new person { name="rrr",age=18,add="TW"},
                    new person { name="ddd",age=20,add="NY"}
            };
            var p = from o in persons
                    group o by o.add into g
                    select new { add = g.Key, persons = g };
            foreach (var s in p)
            {
                Console.WriteLine("Group : {0}", s.add);
                foreach (var s1 in s.persons)
                {
                    Console.WriteLine(s1.name);
                }
            }

流程:把以O.add的群組結果先放到g裡面 (into g),再利用select new 產生一個物件提供查詢
由於g是以add為群組依據,所以視為key值,而person就拿來放群組後的結果了


Join (合併)

 var p1 = new[]{new {Name = "code64", Address = "Tai"},
                  new {Name = "tom", Address = "pen"},
                   new {Name = "jeff", Address = "NY"}};
            var p2 = new[]{new {Name = "code64", Title = "Manager"},
                   new {Name = "tom", Title = "Director"},
                   new {Name = "jeff", Title = "Programmer"}};

            var p6 = from s in p1
                     join s1 in p2 on s.Name equals s1.Name
                     select new
                     {
                         name = s.Name,
                         address = s.Address,
                         title = s1.Title
                     };
            foreach (var v in p6)
            {
                Console.WriteLine("NAME:{0}  address:{1}   title:{2}",v.name,v.address,v.title);
            }

join相對比較好解釋,比較要特別注意的是,在SQL中join 是利用 = 來做資料表的合併對應
在LINQ中則是以 equals取代 = 符號,要特別注意

OrderBy (排序)

 string[] list = new string[] { "111111", "222222", "333333" };
            var listP = from o in list orderby o descending select o;
            foreach (var item in listP)
            {
                Console.WriteLine(item);
            }

 在LINQ中 OrderBy是單一個詞喔,跟SQL的 Order By 拆開來是不一樣的
,而且要明確指示要ascending (升冪) 或者是 descending(降冪)排列方式

沒有留言:

張貼留言