2-2.ASP.NET Core Web API 入門教學 - LINQ基本教學,以後資料庫操作都靠它

ASP.NET Core Web API 入門教學

LINQ是什麼?

語言整合查詢(全名:Language Integrated Query ) 

用途?

就如全名所代表的意思,各種不同的查詢對象,通常都會有各自的語法,但如果每種都要學,就會花很多時間,而且少用的就學的不精,也很容易忘記

因此今天發明了LINQ,只要學習一種LINQ語法,我就可以查詢各種不同的對象,大幅減少學習成本與方便性

例如:

  1. LINQ to Objects:使用LINQ 語法查詢Object
  2. LINQ to SQL:使用LINQ 語法查詢資料庫資料
  3. LINQ to XML:使用LINQ 語法查詢XML資料

等等還有各種的常見的查詢對象,LINQ都有其對應的支援

這可以很有效的解決,今天特定專案剛好要查詢一個很冷門的資料類型對象,此時你不用特地去學該對象的查詢語法,只需要使用LINQ就可以簡單查詢

那背後當然是LINQ會幫你轉換成對應對象的語法進行查詢

你也不會事後過了很久之後要維護,還需要重新複習該冷門資料的查詢語法

所以在C#這邊LINQ可以說是必學的一項技術

另外這邊也建議如果還在用SQL寫在程式碼中的人,趕快換成LINQ,不僅可以讓你的程式更優雅,可以偵錯,也可以有效的避免注入攻擊(這之後會示範)

當然,在某些例外情況,還是有自己寫SQL的必要,不過就通常的查詢、新增、修改、刪除用LINQ就綽綽有餘了

寫法

LINQ這邊主要有兩種不同的寫法,但得到的結果是一樣的

1.宣告式(Declarative)

學過SQL語法的人,可能會覺得有點像SQL敘述句的感覺,譬如說我今天要查一個新聞標題為"凱哥寫程式"的新聞,可以這麼寫

var result = from a in NewsList
             where a.Title == "凱哥寫程式"
             select a;

其實看起來可讀性相當的高,就是從NewsList中,找Title為凱哥寫程式的那一筆出來

2.編程式(Imperative):(lambda)

var result = NewsList.Where(a => a.Title == "凱哥寫程式");

看起來就比較抽象一點,不過這個範例比較簡單,所以還算看得清楚,但就觀看性而言,變得更簡潔

至於要用哪一種,其實就看個人喜好

以下就來簡單示範一下查詢、新增、修改、刪除的LINQ怎麼寫

using Microsoft.AspNetCore.Mvc;

namespace Linq使用範例.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class NewsController : ControllerBase
    {
        private static readonly List<News> NewsList = new List<News>
        {
            new News{NewsId=1,Title="凱哥寫程式",Content="帶你輕輕鬆鬆學習程式"},
            new News{NewsId=2,Title="ASP.NET Core Web API課程",Content="帶你輕輕鬆鬆學習ASP.NET Core Web API"},
            new News{NewsId=3,Title="ASP.NET Core MVC課程",Content="帶你輕輕鬆鬆學習程式ASP.NET Core MVC"},
            new News{NewsId=4,Title="Angular課程",Content="帶你輕輕鬆鬆學習程式Angular"}
        };

        //查詢全部新聞
        [HttpGet]
        public IEnumerable<News> Get()
        {
            return NewsList;
        }

        //查詢指定新聞
        [HttpGet("{id}")]
        public IEnumerable<News> Get(int id)
        {
            var result = from a in NewsList
                         where a.NewsId == id
                         select a;

            result = NewsList.Where(a => a.NewsId == id);

            return result;
        }

        //新增一筆新聞
        [HttpPost]
        public IEnumerable<News> Post(News value)
        {
            NewsList.Add(value);

            return NewsList;
        }

        //修改一筆新聞
        [HttpPut("{id}")]
        public IEnumerable<News> Put(int id, News value)
        {
            var update = (from a in NewsList
                          where a.NewsId == id
                          select a).SingleOrDefault();

            update = NewsList.SingleOrDefault(a => a.NewsId == id);

            if (update != null)
            {
                update.Title = value.Title;
                update.Content = value.Content;
            }

            return NewsList;
        }

        //刪除一筆新聞
        [HttpDelete("{id}")]
        public IEnumerable<News> Delete(int id)
        {
            var delete = (from a in NewsList
                          where a.NewsId == id
                          select a).SingleOrDefault();

            delete = NewsList.SingleOrDefault(a => a.NewsId == id);

            if (delete != null)
            {
                NewsList.Remove(delete);
            }

            return NewsList;
        }
    }
}

開頭先宣告一個News的陣列NewsList,並且給了四個值,後續就針對NewsList進行查詢、新增、修改、刪除

範例檔在這邊,想試試的可以下載回去自己試試看,這邊有分別寫了宣告式跟編程式的語法讓大家參考

影片會有實際每支執行的情況跟簡單講解,因為打字真的不好講解XD

範例檔:下載




Copyright © 凱哥寫程式 2022 | Powered by TalllKai ❤