<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
要說哪門後端語言的語法優雅,那就不得不提C#,而在我看來,LINQ語法可以說是其優雅的重要一環!
通常後端從資料庫查詢出來的資料並不是直接返回給前端使用的(不然前端....),而是需要進行二次的加工篩選處理等操作!而這個操作就離不開LINQ,不然for迴圈套for迴圈,先不說可不可行,肯定可行,但是程式碼的可讀性完全丟失,其他同行看到也會笑話人,連編譯器執行這段程式碼時也是發盡牢騷(....),從而導致程式的效能低下!
當然如果用SQL一次性把資料處理到位也行,但是實際專案開發中,很少能一次處理到位的,往往都需要二次處理(比如:我不僅需要List,還需要統計資訊,總數、均值,總和等)
說到Linq,就不得不提Lambda表示式了,說實話,實際開發中,直接用Linq寫的相關程式碼還真不多,Lambda表示式到處都是!
先上程式碼,直觀看看他們兩者有什麼區別
static void Main(string[] args) { List<User> users = new List<User>(); var letters = "abcdefghijklmnopqrstuvwxyz"; var rand = new Random(); for (int i = 0; i < 10; i++) { string name = default; for(int j = 0; j < 4; j++) { name += letters[rand.Next(25)]; } users.Add(new User { Name = name, Age = rand.Next(1, 99) }); } //Linq IEnumerable<User> usera = from u in users where u.Age < 35 select u; //usera.ToList(); //Lambda List<User> userb = users.Where(x => x.Age < 35).ToList(); //輸出來看看 foreach(User u in usera) { Console.WriteLine("name:{0},age:{1} n", u.Name, u.Age); } Console.WriteLine("------------------"); foreach (User u in userb) { Console.WriteLine("name:{0},age:{1} n", u.Name, u.Age); } Console.ReadLine(); } class User { public string Name { get; set; } public int Age { get; set; } }
看完程式碼,是不是感覺Linq跟SQL差不多,對,本來他們就是類似語言,我個人猜測應該是模仿出來的一種語法糖吧(具體誰模仿誰就不得而知了),相似也好,學起來更方便了。而Lambda表示式寫起來是真的舒服!
那麼,Linq和Lambda有什麼關係呢
包含的關係,Linq範圍更廣一些,Lambda表示式看起來像一個箭頭函數,就是!,也可以說是一個匿名函數!他相當於Linq的二次封裝語法糖吧(個人理解)
基本上Linq能實現的,Lambda表示式都可以實現
通常溝通中,說Linq寫法,其實預設就是Linq Lambda表示式了。直接鏈式寫法,簡潔,可讀性,後期維護起來也是非常方便的。
眾所周知,SQL能實現的功能是非常強大的,而Linq同樣可以實現。
但實際開發中,SQL一般會寫的相當複雜,聚合查詢是常事,而Linq一般很少涉及(也能多表查詢),更多的是諸如去重、篩選、排序、分組、統計計算等操作
獲取不同使用者的許可權選單 當用戶登入時,可以獲取到使用者的許可權選單集合(id集合),而具體展示選單,還需要到全部選單集合中去查詢對應的,然後篩選出來,返回給前端,最後進行渲染展示!
如果選單集合List全都是一級選單,那相當簡單,但是如果有二級、三級選單就比較麻煩了,在這個篩選過程中,我就用到了Linq來實現部分功能
//powers 使用者許可權選單集合 //menus 全部選單集合 //menus.SubItems 二級選單集合 (from sub in menus.SubItems where powers.Any(x=>x.Key == sub.Id) select sub).Count()
如上程式碼段,可以獲取到當前選單的子選單的個數
如果不加外層的Count(),那結果就是當前選單子選單(此使用者有許可權的)集合
如果不採用Linq,一行程式碼很難實現(方法還是有的,只是不會Linq那麼方便寫)
LINQ其實並不是後端語言的專屬,前端同樣可以使用,只需要參照相應的js外掛即可
js、vue等專案中都有對應的外掛(例如jslinq),僅需要對應的元件中引入外掛(也可以在母版頁或全域性參照),然後就可以像後端語言中一樣的使用即可。
具體寫法與後端語言差不多,常用方法名也都一樣
要說不一樣的地方,我感覺唯一不好的體驗就是,前端使用時,沒有程式碼提示了,如果對LINQ不太熟悉的,在使用LINQ時,還需要藉助相關檔案,多用幾次,自然就不算什麼問題了。
這裡就不展開細說Linq在前端的具體用法了,需要的可以自行查詢,這裡僅做一個拋磚引玉的效果。
到此這篇關於C#集合查詢Linq在專案中使用詳解的文章就介紹到這了,更多相關C#集合查詢Linq內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45