天天看點

Linq專題之提高編碼效率—— 第二篇 神一樣的匿名類型

說起匿名類型,我們都知道這玩意都是為linq而生,而且匿名類型給我們帶來的便利性大家在實戰中應該都體會到了,特别适合于一次性使用,臨時

使用這些場景,雖然說是匿名類型,也就是說是有類型的,隻是匿名了而已,對吧,這篇我們就來探索下匿名類型到底和linq有多大關系呢???

一:select中的匿名類型

  這個我想大家用的是最多的,畢竟你select之後需要把原始資料重塑成另一種形狀展示出來,不信你看嘛!!!

Linq專題之提高編碼效率—— 第二篇 神一樣的匿名類型

從上面的代碼中,你可以看到,原來隻是一個string數組,經過linq整合之後就成了一個IEnumerable集合的匿名類集合,并且成功的把每個字元串大寫化

并且統計每個字元串的長度,也展現了匿名類型的臨時性。

二:JavaScriptSerializer 中的匿名類型

     這個類型我想大家都清楚,不過性能更高的方式應該是用JsonConvert吧,但這個不是本篇讨論的話題,我們重點來看看匿名類型的Json序列化能給我們

帶來多大的便利性,比如下面這樣:

Linq專題之提高編碼效率—— 第二篇 神一樣的匿名類型

從上圖中可以看到,其實我并沒有顯式的定義一個model,而是定義了一個匿名的model,這個model具有Message和Code字段,這樣我們就可以直接序

列化了,是不是很友善呢??

三:linq中的多鍵關聯

  當我們用linq做兩個集合的關聯時,會用到on...equals...或者就是兩個from...from....where 解決,而且通常情況下隻有一個鍵的關聯,比如下面這樣:

由于資料是僞造的,是以就不考慮邏輯性,而是專注于linq文法層次,好了,上面這樣的linq,我們看看最後的結果會是怎麼樣的。

Linq專題之提高編碼效率—— 第二篇 神一樣的匿名類型

可以看到我們從資料庫中讀取到了三條資料,而且這時候我們equal中的條件是on p.ProductID equals o.ProductID,現在需求撲面而來了,如果我

不僅要判斷ProductID,還要判斷SupplierID也要相等,這樣的需求特麼的怎麼搞呢??? 那就看看我是怎麼搞的哈!!!

Linq專題之提高編碼效率—— 第二篇 神一樣的匿名類型

看到沒有,标成紅色的就是代碼的核心,正好我們利用到了匿名類型的equals重寫方法,就是因為這個重寫解決了多條件的問題,是不是很強大,下面

再簡單看看匿名類型的equals是怎麼被重寫的。

Linq專題之提高編碼效率—— 第二篇 神一樣的匿名類型

從圖中可以看到,匿名類型就是追個字段的equals方法比較是否相等的,好了,到現在為止你應該明白了匿名類型對于linq來說是多麼的重要啦~~~

繼續閱讀