iT邦幫忙

0

LinQ該不該學

  • 分享至 

  • xImage

有鑑於我在刷codewars時
best pratice常常是使用linQ的人一句程式KO

像是要算出 int[] scores 的average
linQ 直接scores.Average();
但我還在for迴圈寫好幾行

專案中有時也會看到LinQ+lambda
常常看的頭好痛 好像不是很容易維護....(?)
請問各位寫C#/asp.net WEB的大大
LinQ 是一個必學的東西嗎(?)
還是我就乖乖寫原本會的就好了

看更多先前的討論...收起先前的討論...
你應該乖乖把Linq學好吧~ 學會後你只會想一直用
kw6732 iT邦研究生 5 級 ‧ 2022-09-27 12:12:14 檢舉
建議你必學 語法糖不吃不可
我只能說,能學就學。一定有幫助的。
該學,學了不是顯示你的程式能力有多強大,而是讓接手的人更容易維護你的程式碼
marvinhsu iT邦新手 4 級 ‧ 2022-09-27 13:36:08 檢舉
寫習慣的話一看就知道想要做什麼
反而用迴圈還要花時間理解迴圈內的邏輯
尤其迴圈內寫了很多東西的時候
每個東西都需要學了以後才知道,對你自己有沒有用
powerc iT邦新手 1 級 ‧ 2022-09-27 14:18:21 檢舉
必學,不可能不用,否則像你hard code迴圈算平均,那才是真的難維護
runan5678 iT邦研究生 1 級 ‧ 2022-09-27 15:58:39 檢舉
這個真的很好用
OuJiaHao iT邦新手 4 級 ‧ 2022-09-27 16:23:51 檢舉
LinQ我覺得在現實專案中是必學的技能點之一
然而如果是在解題平台的話 使用LinQ反而會少掉一些知識點
因此 解題平台上學習演算法、資料結構的話建議還是手造輪子不行再搭配LinQ
Yaowen iT邦研究生 4 級 ‧ 2022-09-27 17:58:14 檢舉
要 一行就可以解決的事情...超舒服的
感謝各位大大的建議!!!!!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
OuJiaHao
iT邦新手 4 級 ‧ 2022-09-29 12:34:17
最佳解答

在現實生活中的專案透過 LinQ 來處理資料會是開發的一大利器
例如想要找出所有15歲以上的學生

public class Student{
	public string name {get;set;}
	public int age {get;set;}
	
	public Student(string name, int age){
		this.name = name;
		this.age = age;
	}
}

List<Student> findStudents(List<Student> students){	
	// 取得15歲以上的學生清單
	return students.Where((k)=> k.age >= 15).ToList();	
}

還有諸多條件例如 OrderBy、Skip、Single ... 很多操作可以搭配
因此在實作專案的時候適時的搭配 LinQ 可以加速整體的開發效率及體驗
而相關的教材網路上有眾多資源 這邊就不一一列舉了

語言整合式查詢


然而在解題平台中,如 LeetCode、Codewars ... 等
相對比較著重資料結構與演算法
更重要的是你對時間複雜度及空間複雜度的掌握
例如
上面的需求而言是想到透過歷遍所有元素來達成?
還是還有其他方式可以加速程式來達成?
因此在解題平台中 透過自己對資料結構與演算法的認知去訓練解題思維
會相對比較重要
因此在解題平台可能我會撰寫的方式如下

public class Student{
	public string name {get;set;}
	public int age {get;set;}
	
	public Student(string name, int age){
		this.name = name;
		this.age = age;
	}
}

List<Student> findStudents(List<Student> students){	    
    List<Student> result = new List<Student>();
    
    foreach(Student s in students){
        if(s.age >= 15)
            result.Add(s);
    }
    
    return result;
}

當然如果你對 LinQ 有足夠的了解後 要在解題平台使用也是沒問題的 ~


如果對 LeetCode 的解題思路或學習方式有興趣也歡迎到以下網址逛逛
相信會有不錯的收穫的

LeetCode The Hard Way

感謝大大詳細的說明~~!!!

4
科科
iT邦研究生 1 級 ‧ 2022-09-27 12:34:07

寫C#不學Linq,就是自廢一個武器
而且考量的開發速度,用Linq可以節省不少時間
如果被專案PM壓時程開發,你就知道能省時間就省
Linq算是簡潔好懂、好維護了,看得頭痛只是因為你不熟悉

感謝大大給予實務上的經驗談 非常寶貴

2
海綿寶寶
iT邦大神 1 級 ‧ 2022-09-27 14:10:52

官方說明來看
非學不可
不學可惜

好的 感謝大大

5
PPTaiwan
iT邦好手 1 級 ‧ 2022-09-27 15:35:27

可以先去參考 黑暗執行緒 所提到這篇文件 ..

我建議可以學習,但還是要學習 TSQL/PLSQL 資料庫應用,但程式人員不管如何都是要不斷的學習這是「不變的定律」,「TSQL / PLSQL 對於程式開發還是很重要」不會因為用 LINQ 就應該不學什麼,不了解什麼,因為你的未來怎麼會知道是會如何呢??

以 MSSQL 來說,個人以 SP 為主,將邏輯的部份寫在 SP 裡去做一些即時的數據運算,當運算達到數值後就自動去發簡訊,比用 C# 寫 WinForm、Web 來的輕鬆很多,配合著 SQL CLR 來將運算的數據與資料導入/出 JSON,以供其他程式來使用這些 JSON 資料。

我的 SP 裡面有一段當「地震發生後」我會將其資料倒回資料庫並以 SP 來運算與解析資料,再將這些資料導出給另一個 Web 程序以了解「地震」影響台灣那些區域,並將其影響的區域做分析與整合出資料以供給數據圖表做為資料的來源,邏輯的處理更可以分拆的更清楚,不會 C# 思考邏輯與 TSQL 相衝混亂掉,這是我認為最佳的方法。系統穩定不會因為「思考不周」結果導致不知道什麼原因而系統掛掉...

Linq 的應用我只會用在 "SP" 或是 "JSON" 來做為頁面上的查詢動作,再說了都用 SQL 導出 JSON 何必再下達 LINQ 去抓資料後組合再導出 JSON 呢?? 我個人覺得真的是多此一舉。

TSQL 不好組 JSON 多層結構?? 多多學習如何寫並做筆記就可以懂了,非常簡單 ...

但寫 SP 最重要還是註解與排版,不要整個語法連成一段都沒有分斷落的難以閱讀,沒有排版 TSQL Debug 花的時間更長。另外像是 INSERT , UPDATE 可能太長太麻煩那可以用 SSMS 「編輯前200筆的資料列」勾選你不要的欄位,就可以簡簡單單組合出一段完整的語法。

方法很多,但我個人不建議因為一個函式庫好用,那就放棄或是不再研究,未來你 SQL 管理的好,寫的好,去考個證照也可以當資料庫管理師..

有幾種文件我覺得要寫的

  1. ER Diagram 這很基礎也很重要,大學就在教了...
  2. SP 要寫 WORD 文件以寫出此 SP 的目的是什麼,影響那些 TABLE 或是導出什麼內容出來,相信很多人不會寫這種文件。

目前還有很多不懂之處 等我碰到時一定受用良多 感謝您

0
wilson1966
iT邦研究生 2 級 ‧ 2022-09-27 16:47:15

如果是運用在ERP 身上,個人是建議放棄Linq,還是用傳統SQL較方便。但也許是我技能不佳的關係,不能一概而論。
我這邊因為ERP USER 要求非常多,不得不用一些花式SQL來滿足USER 的需求,所以,我個人很少用Linq。

感謝大大的建議

我要發表回答

立即登入回答