专栏首页人工智能小咖LINQ凭什么被誉为有史以来最好的技术?

LINQ凭什么被誉为有史以来最好的技术?

今天来聊一下LINQ,这是笔者最喜欢的技术之一,在艰难时刻,它总能使笔者保持积极状态。如果对其一无所知,笔者敢肯定,经过讲解,你明天就会开始使用它。

免责声明:笔者主要是在C#上使用该技术,但是它至少有针对Python和PHP的包装器/副本,因此其一般原理在其他语言中也适用。

LINQ是什么?

许多强大的技术很难解释,但LINQ却并非如此:使用LINQ,便可以对常规编程集合(如列表或数组)运行SQL查询。

为什么它功能如此强大呢?现在来看一个简单的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只是披着华丽外衣的一串循环函数。

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

那么就从最简单的理由开始:上文的代码行不容错过,请再次仔细看一下上面的示例:

var isExample = listOfObjects.Any(x => x.practicalUse == null)

现在将其写作常规代码:

可以将其写得简短一些(尽量写作内联if函数),但是这也表明了编写这样的函数是多么令人烦躁-尤其是在可能经常需要这些函数的情况下。最令人反感的莫过于在混乱的代码中,程序员可能无从得知代码中到底发生了什么。必须按住Control键并单击才能跳到另一个函数中,查看它的作用,然后返回。

另一个重要的作用是,它可以将这些语句彼此链接在一起:

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

.Take(5)看起来微不足道,但却很重要。它允许仅返回查询列表中的前五个结果。重写这样的内容需要花费很长时间,当尝试提出计数器变量和for循环中断时,甚至需要在Google上编辑或浪费大量精力思考。

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

list.First(x => x.stupidCondition)

将一个列表的子集转换为另一个相同类型的子集也很容易,但这也可能需要一些时间来重写。见鬼的是,这甚至是编程学徒面试中一个很受欢迎的问题。

现在是最后一个好处:实现LINQ基本上不费吹灰之力。你只需创建这个库并使用它。在五分钟之内,你就可以开始使用它了,这很神奇。它几乎可以用于任何集合,比如列表或数组。在最糟糕的情况下,须对IQueriable类型进行一些类型转换,此时,你所选择的IDE甚至可以有所帮助。

笔者通常会对百利而无一害的软件持怀疑态度,但使用了LINQ多年,并没有发现不妥之处。

应用实例

在此,笔者必须总结一下NDA及其所有内容,但还是想谈谈日常生活中的一些应用示例。LINQ总能以各种方式提供助力,有了它,笔者笑口常开。

从队列中获取任务:

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

很快就完成了。太方便了,是吧?

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

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

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

tasks.Max(x => x.dateOfEntry)

结论

感谢阅读,希望您喜欢这篇文章。

原文链接:https://medium.com/better-programming/what-is-linq-and-why-is-it-the-best-thing-since-sliced-bread-ac48bc466720

原文作者:keypressingmonkey

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript中的闭包到底是什么?

    即使是短暂接触JavaScript的初学者,想必也一定听说过“闭包”。本文将介绍有关闭包的全部内容,但文中并不会经常出现这个词。

    人工智能小咖
  • 计算机视觉路线图

    如今,计算机视觉(CV)已成为人工智能的一项重要应用(例如,图像识别、对象跟踪、多标签分类)。本文将引导你完成搭建计算机视觉系统的一些主要步骤。

    人工智能小咖
  • 量子计算机程序设计

    当前,人们普遍认为量子计算机尚未做好实际应用的准备,且实现实用化仍需时日。本文将首先介绍量子计算机编程的一些基本原理,并解开误解。然后介绍一些免费的开源软件,如...

    人工智能小咖
  • ASP.NET MVC5高级编程 ——(7)LINQ to SQL

    LINQ( Language Integrated Query )——语言集成查询,.NET Framework 3.5 中出现的技术,其命名空间(.NET F...

    浩Coding
  • python3实现多线程ping一个网段

    ####################################################

    py3study
  • 《挑战程序设计(第二版)》(第二章)POJ No.2386

    有一个大小为N×M的园子,雨后积起了水。八连通的积水被认为是连在一起的。求园子里一共有多少水洼?\

    Spaceack
  • 花式照片墙

    观众老爷们,小李今天给大家展示一下我“精湛”的厨艺。如题所示,花式照片墙这道小菜马上给大家端上来,大家吃好喝好。

    老肥码码码
  • 实战篇 | 用Xpath,bs4,正则三种方式爬51job

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

    叫我龙总
  • .NET斗鱼直播弹幕客户端(上)

    现在直播平台由于弹幕的存在,主播与观众可以更轻松地进行互动,非常受年轻群众的欢迎。斗鱼TV就是一款非常流行的直播平台,弹幕更是非常火爆。看到有不少主播接入 弹幕...

    梁规晓
  • 当我们做后仿时我们究竟在仿些什么(四)

    就像人类容易接受自然数,但对于负数缺乏某种直觉上的认识一样;后仿过程中经常出现的 Negative Delay 和 Negative Timing Check ...

    icsoc

扫码关注云+社区

领取腾讯云代金券