有鑑於我在刷codewars時
best pratice常常是使用linQ的人一句程式KO
像是要算出 int[] scores 的average
linQ 直接scores.Average();
但我還在for迴圈寫好幾行
專案中有時也會看到LinQ+lambda
常常看的頭好痛 好像不是很容易維護....(?)
請問各位寫C#/asp.net WEB的大大
LinQ 是一個必學的東西嗎(?)
還是我就乖乖寫原本會的就好了
在現實生活中的專案透過 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 的解題思路或學習方式有興趣也歡迎到以下網址逛逛
相信會有不錯的收穫的
寫C#不學Linq,就是自廢一個武器
而且考量的開發速度,用Linq可以節省不少時間
如果被專案PM壓時程開發,你就知道能省時間就省
Linq算是簡潔好懂、好維護了,看得頭痛只是因為你不熟悉
可以先去參考 黑暗執行緒 所提到這篇文件 ..
我建議可以學習,但還是要學習 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 管理的好,寫的好,去考個證照也可以當資料庫管理師..
有幾種文件我覺得要寫的
如果是運用在ERP 身上,個人是建議放棄Linq,還是用傳統SQL較方便。但也許是我技能不佳的關係,不能一概而論。
我這邊因為ERP USER 要求非常多,不得不用一些花式SQL來滿足USER 的需求,所以,我個人很少用Linq。