" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#集合查詢Linq在項(xiàng)目中使用詳解

 更新時(shí)間:2022年05月29日 15:03:19   作者:握風(fēng)  
本文主要介紹了C#集合查詢Linq在項(xiàng)目中使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

要說(shuō)哪門后端語(yǔ)言的語(yǔ)法優(yōu)雅,那就不得不提C#,而在我看來(lái),LINQ語(yǔ)法可以說(shuō)是其優(yōu)雅的重要一環(huán)!

通常后端從數(shù)據(jù)庫(kù)查詢出來(lái)的數(shù)據(jù)并不是直接返回給前端使用的(不然前端....),而是需要進(jìn)行二次的加工篩選處理等操作!而這個(gè)操作就離不開(kāi)LINQ,不然for循環(huán)套for循環(huán),先不說(shuō)可不可行,肯定可行,但是代碼的可讀性完全丟失,其他同行看到也會(huì)笑話人,連編譯器運(yùn)行這段代碼時(shí)也是發(fā)盡牢騷(....),從而導(dǎo)致程序的性能低下!
當(dāng)然如果用SQL一次性把數(shù)據(jù)處理到位也行,但是實(shí)際項(xiàng)目開(kāi)發(fā)中,很少能一次處理到位的,往往都需要二次處理(比如:我不僅需要List,還需要統(tǒng)計(jì)信息,總數(shù)、均值,總和等)

Linq Lambda

說(shuō)到Linq,就不得不提Lambda表達(dá)式了,說(shuō)實(shí)話,實(shí)際開(kāi)發(fā)中,直接用Linq寫的相關(guān)代碼還真不多,Lambda表達(dá)式到處都是!

先上代碼,直觀看看他們兩者有什么區(qū)別

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();

    //輸出來(lái)看看
    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; }
}

看完代碼,是不是感覺(jué)Linq跟SQL差不多,對(duì),本來(lái)他們就是類似語(yǔ)言,我個(gè)人猜測(cè)應(yīng)該是模仿出來(lái)的一種語(yǔ)法糖吧(具體誰(shuí)模仿誰(shuí)就不得而知了),相似也好,學(xué)起來(lái)更方便了。而Lambda表達(dá)式寫起來(lái)是真的舒服!
那么,Linq和Lambda有什么關(guān)系呢
包含的關(guān)系,Linq范圍更廣一些,Lambda表達(dá)式看起來(lái)像一個(gè)箭頭函數(shù),就是!,也可以說(shuō)是一個(gè)匿名函數(shù)!他相當(dāng)于Linq的二次封裝語(yǔ)法糖吧(個(gè)人理解)
基本上Linq能實(shí)現(xiàn)的,Lambda表達(dá)式都可以實(shí)現(xiàn)
通常溝通中,說(shuō)Linq寫法,其實(shí)默認(rèn)就是Linq Lambda表達(dá)式了。直接鏈?zhǔn)綄懛?,?jiǎn)潔,可讀性,后期維護(hù)起來(lái)也是非常方便的。

眾所周知,SQL能實(shí)現(xiàn)的功能是非常強(qiáng)大的,而Linq同樣可以實(shí)現(xiàn)。
但實(shí)際開(kāi)發(fā)中,SQL一般會(huì)寫的相當(dāng)復(fù)雜,聚合查詢是常事,而Linq一般很少涉及(也能多表查詢),更多的是諸如去重、篩選、排序、分組、統(tǒng)計(jì)計(jì)算等操作

Linq項(xiàng)目中的一次使用經(jīng)歷

獲取不同用戶的權(quán)限菜單 當(dāng)用戶登錄時(shí),可以獲取到用戶的權(quán)限菜單集合(id集合),而具體展示菜單,還需要到全部菜單集合中去查找對(duì)應(yīng)的,然后篩選出來(lái),返回給前端,最后進(jìn)行渲染展示!
如果菜單集合List全都是一級(jí)菜單,那相當(dāng)簡(jiǎn)單,但是如果有二級(jí)、三級(jí)菜單就比較麻煩了,在這個(gè)篩選過(guò)程中,我就用到了Linq來(lái)實(shí)現(xiàn)部分功能

//powers 用戶權(quán)限菜單集合
//menus 全部菜單集合
//menus.SubItems 二級(jí)菜單集合

(from sub in menus.SubItems where powers.Any(x=>x.Key == sub.Id) select sub).Count()

如上代碼段,可以獲取到當(dāng)前菜單的子菜單的個(gè)數(shù)
如果不加外層的Count(),那結(jié)果就是當(dāng)前菜單子菜單(此用戶有權(quán)限的)集合
如果不采用Linq,一行代碼很難實(shí)現(xiàn)(方法還是有的,只是不會(huì)Linq那么方便寫)

Linq to js [在前端的應(yīng)用]

LINQ其實(shí)并不是后端語(yǔ)言的專屬,前端同樣可以使用,只需要引用相應(yīng)的js插件即可
js、vue等項(xiàng)目中都有對(duì)應(yīng)的插件(例如jslinq),僅需要對(duì)應(yīng)的組件中引入插件(也可以在母版頁(yè)或全局引用),然后就可以像后端語(yǔ)言中一樣的使用即可。
具體寫法與后端語(yǔ)言差不多,常用方法名也都一樣
要說(shuō)不一樣的地方,我感覺(jué)唯一不好的體驗(yàn)就是,前端使用時(shí),沒(méi)有代碼提示了,如果對(duì)LINQ不太熟悉的,在使用LINQ時(shí),還需要借助相關(guān)文檔,多用幾次,自然就不算什么問(wèn)題了。

這里就不展開(kāi)細(xì)說(shuō)Linq在前端的具體用法了,需要的可以自行查詢,這里僅做一個(gè)拋磚引玉的效果。

到此這篇關(guān)于C#集合查詢Linq在項(xiàng)目中使用詳解的文章就介紹到這了,更多相關(guān)C#集合查詢Linq內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中SetStyle的具體使用

    C#中SetStyle的具體使用

    本文主要介紹了C#中SetStyle的具體使用,該方法用于啟用或禁用特定的控件樣式,以控制控件的行為和外觀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • C# WinForm窗體編程中處理數(shù)字的正確操作方法

    C# WinForm窗體編程中處理數(shù)字的正確操作方法

    這篇文章主要介紹了C# WinForm窗體編程中處理數(shù)字的正確操作方法,本文給出了正確示例,并解釋了為什么要這么做,需要的朋友可以參考下
    2014-08-08
  • 深入分析c# 封裝和訪問(wèn)修飾符

    深入分析c# 封裝和訪問(wèn)修飾符

    這篇文章主要介紹了c# 封裝和訪問(wèn)修飾符的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#中遍歷Hashtable的4種方法

    C#中遍歷Hashtable的4種方法

    這篇文章主要介紹了C#中遍歷Hashtable的4種方法,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-06-06
  • Chrome Visual Studio 2005下的編譯過(guò)程

    Chrome Visual Studio 2005下的編譯過(guò)程

    研究Chrome ,首先得把它編譯出來(lái),這對(duì)于后續(xù)的代碼分析和閱讀有很大的幫助,想想自己編譯出一個(gè) Chrome 瀏覽器來(lái)使用,那是一件很炫的事情。
    2009-07-07
  • WinForm限制窗體不能移到屏幕外的方法

    WinForm限制窗體不能移到屏幕外的方法

    這篇文章主要介紹了WinForm限制窗體不能移到屏幕外的方法,實(shí)例分析了C#中WinForm窗體操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C# 格式化字符串的實(shí)現(xiàn)代碼

    C# 格式化字符串的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C# 格式化字符串的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-11-11
  • C# double類型變量比較分析

    C# double類型變量比較分析

    這篇文章主要介紹了C# double類型變量比較分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • C#中static的詳細(xì)用法實(shí)例

    C#中static的詳細(xì)用法實(shí)例

    在C#中所有方法都必須在一個(gè)類的內(nèi)部聲明,然而如果把一個(gè)方法或字段聲明為Static,就可以使用類名來(lái)調(diào)用方法或訪問(wèn)字段,下面這篇文章主要給大家介紹了關(guān)于C#中static詳細(xì)用法的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C# 特殊的string類型詳解

    C# 特殊的string類型詳解

    本文主要介紹了C# 特殊的string類型。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02

最新評(píng)論

德惠市| 通渭县| 哈密市| 竹溪县| 富阳市| 岳西县| 柘城县| 建平县| 合山市| 黔西| 石棉县| 仁寿县| 浦北县| 宁河县| 库尔勒市| 安化县| 峨边| 华安县| 勃利县| 文山县| 册亨县| 武平县| 读书| 阜平县| 扶余县| 渑池县| 原平市| 牟定县| 武平县| 楚雄市| 淳安县| 古浪县| 扶绥县| 鄂托克前旗| 桦南县| 开远市| 宿松县| 赤水市| 邯郸市| 海晏县| 临城县|