图源:unsplash

LINQ有一种神奇的魅力,它能在困难时候帮助笔者保持积极状态。
如果你不太理解它,我敢肯定,看过本文之后,来日诰日你就会开始利用它。

本文将见告你,LINQ凭什么被誉为有史以来最好的技能。

linqphp你懂得LINQ吗为什么LINQ远胜于其他技巧 RESTful API

免责声明:笔者紧张是在C#上利用该技能,但是它至少有针对Python和PHP的包装器/副本,因此其一样平常事理在其他措辞中也适用。

LINQ是什么?

许多强大的技能很难阐明,但LINQ可以:利用LINQ,便可以对常规编程凑集(如列表或数组)运行SQL查询。

图源:LINQ

它的强大强大功能从何而来呢?现在来看一个大略的LINQ语句:

isExample= listOfObjects.Where(x => x.practicalUse == null).Any()//Or in short as reSharper will tell you:isExample = listOfObjects.Any(x => x.practicalUse == null)

要理解LINQ,首先须要理解lambda函数

Lambda函数较为独特,表示为x =>,如果以前从未利用过该函数,可能须要一些韶光来理解。
它基本上是一个内联函数声明,能够引用被调用列表中的各个元素。

实质上,它是Any()和x的组合,无非有一个更长的包装器而已,用于检测循环检讨列表中元素是否知足必需的参数。
如果是,则返回true。

以是说真的,LINQ只是披着华美外衣的一串循环函数。

图源:unsplash

为什么LINQ远胜于其他技能?

那么就从最大略的情由开始,请再次仔细看一下上面的示例:

varisExample = listOfObjects.Any(x => x.practicalUse == null)

现在将其写作常规代码

var isExample; foreach(element in list) { if(element.practicalUse != null) { returntrue; } }

可以将其写得简短一些(只管即便写作内联if函数),但是这也表明了编写这样的函数是多么令人烦躁-尤其是在可能常常须要这些函数的情形下。

最令人反感的莫过于在混乱的代码中,程序员可能无从得知代码中到底发生了什么。
必须按住Control键并单击才能跳到另一个函数中,查看它的浸染,然后返回。

另一个主要的浸染是,它可以将这些语句彼此链接在一起:

varsingleExample = listOfObjects.Where(x => x.practicalUse == null).Take(5)

.Take(5)看起来微不足道,但却很主要。
它许可仅返回查询列表中的前五个结果。
重写这样的内容须要花费很永劫光,当考试测验提出计数器变量和for循环中断时,乃至须要在Google上编辑或摧残浪费蹂躏大量精力思考。

还可以只返回第一个结果:

list.First(x=> x.stupidCondition)

将一个列表的子集转换为另一个相同类型的子集也很随意马虎,但这也可能须要一些韶光来重写。
这乃至是编程初学者口试中一个很受欢迎的问题。

末了一点是:实现LINQ基本上不费吹灰之力。
你只需创建这个库并利用它。
在五分钟之内,你就可以开始利用它了,这很神奇。

图源:unsplash

它险些可以用于任何凑集,比如列表或数组。
在最糟糕的情形下,须对IQueriable类型进行一些类型转换,此时,你所选择的IDE乃至可以有所帮助。

笔者常常会疑惑那些“完美软件”只不过是“营销”罢了,但利用了LINQ多年,它真确当之无愧。

运用实例

接下来,笔者还想谈谈日常生活中的一些运用示例,LINQ总能以各种办法供应助力。

从行列步队中获取任务:

tasknextOpenTask = openTasks.FirstOrDefault(x => !x.inProgress &&!x.errorState).OrderByDescending(x => x.dateOfEntry)

很快就完成了,这太方便了!

从列表中只返回一个属性(内联类型转换):

stringname = customers.Select(x => x.name)

获取最早或最新的未完成任务:

tasks.Max(x=> x.dateOfEntry)

“最好的技能”LINQ,实至名归!
快来pick它吧,入股不亏!

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范