LINQ - 查询语法与方法链和 lambda [关闭]

2024-03-20

在选择在其中一种 LINQ 扩展方法中使用 LINQ 查询语法或 Lambda 表达式时,是否有人遵守任何规则(或者您是否被迫遵守雇主的任何规则?)?这适用于任何实体、SQL、对象、任何东西。

在我们的工作场所,我的老板根本不喜欢 lambda,他会使用查询语法来做任何事情,在某些情况下,我发现这种语法的可读性较差。

var names = collection.Select(item => item.Name);

var names = from item in collection
            select item.Name;

也许在添加条件时,我发现 Lambda 变得有点混乱,其中

var names = collection.Where(item => item.Name == "Fred")
                      .Select(item => item.Name);

var names = from item in collection
            where item.Name == "Fred"
            select item.Name;

只是出于兴趣:编译器如何处理这个?有谁知道上面的 LINQ 查询如何编译成 lambda 吗?会不会Name为每个元素调用属性?我们可以这样做并可能提高性能吗?这是否意味着 lambda 在性能方面稍微更可控?

var names = collection.Select(item => item.Name)
                      .Where(name => name == "Fred");

当然,当我们开始使用越来越多的表达式时,lambda 会变得混乱,我会开始在这里使用查询语法。

var names = collection.Where(item => item.Name == "Fred")
                      .OrderBy(item => item.Age)
                      .Select(item => item.Name);

var names = from item in collection
            where item.Name == "Fred"
            order by item.Age
            select item.Name;

我发现还有一些事情无法使用查询语法完成。您可能认为其中一些非常简单(尤其是聚合函数),但事实并非如此,您必须在末尾添加一种 LINQ 扩展方法,在我看来,使用 lambda 表达式看起来会更整洁。

var names = collection.Count(item => item.Name == "Fred");

var names = (from item in collection
            where item.Name == "Fred"
            select item).Count()

即使对于一些简单的 lambda 链,锐锐 http://www.jetbrains.com/resharper/建议我将它们转换为 LINQ 查询。

还有其他人可以补充吗?是否有人有自己的小规则,或者他们的公司是否建议/强制使用一个规则?


为了回答您有关翻译的问题,查询表达式将始终根据 C# 4 规范 7.16 的规则(或 C# 3 规范中的等效规则)进行翻译。在您询问有关以下问题的示例中Name属性,这不是查询表达式翻译的问题 - 这是Select and Where方法使用它们作为参数的委托或表达式树。有时在过滤之前进行投影是有意义的,有时则不然。

至于小规则,我只有一个:使用对相关查询最可读的方式。因此,如果查询发生变化并且“哪种形式更具可读性”同时发生变化,请更改所使用的语法。

如果你打算使用 LINQ 你should对这两种语法都满意,至少对阅读感到满意。

I tend找到具有多个范围变量的查询(例如通过SelectMany or Join, or a let子句)最终使用查询表达式变得更具可读性 - 但这远不是一个硬性规定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ - 查询语法与方法链和 lambda [关闭] 的相关文章

  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 如何将隐藏字段从一个页面传递到另一页面?

    我有一个 Net 类库 我想从一次代码隐藏页面传递一个隐藏变量 并在另一个代码隐藏页面中获取它 请注意 我没有任何可以使用表单标签和 get post 方法的设计页面 aspx 页面 我们应该怎么做 注意 我想使用隐藏字段将值从一页传递到另
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • .Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序正在使用 NetAdvantage)

    我们已经用 VB NET 4 0 VS2010 编写了 NET 应用程序 并使用设置为调试和发布配置的 AnyCPU 设置的所有项目进行编译 我们注意到 当此应用程序在 64 位环境中运行 在 Windows Server 2003 R2
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 计算三级缓存的实际/有效CPI

    a 给定一个具有两级高速缓存 L1 和 L2 的内存系统 以下是规格 L1缓存命中时间 2个时钟周期 一级缓存命中率 92 L2 缓存的未命中惩罚 L2 的命中时间 8 个时钟周期 二级缓存命中率 86 主存丢失惩罚 37 个时钟周期 暂时
  • 带有加载指示器的 UISearchController

    我实施了UISearchController我正在从 js 回调获取数据 但是当我录入searchbar放入数据需要一些时间 所以我想知道如何实现加载indicator进入表查看结果UISearchController 用 Swift 3
  • javascript jquery 单选按钮单击

    我有 2 个单选按钮和 jquery 正在运行
  • 核心数据:-deleteObject:崩溃,删除规则是原因吗?

    我有以下模型 如图所示 替代文本http img521 imageshack us img521 9741 schermata20100224a12251 png http img521 imageshack us img521 9741
  • jQuery 自动完成:点击返回提交表单

    我正在使用 jQuery 自动完成插件 I m not sure if there s a better way to do this var base url window location href slice 0 window loc
  • Volley 不发送带参数的 post 请求。

    我有下面的代码 Google 的 Volley Library 来向我的 php 服务器发送 POST 请求并获取结果信息 我没有检查就尝试了代码isset POST id 在 php 中并且代码运行良好 当我开始检查时 php 将跳过 i
  • 选择放置在另一个元素之后但不是立即放置的第一个元素

    怎么可能选择仅第一个元素 例如 h2 在另一个元素 例如 h1 之后 但它是不一定立即放置在 因此 element element 例如 h1 h2 不起作用 因为它选择放置的元素立即地元素之后 h1 Title1 h1 lt many t
  • jQuery 验证触发错误消息

    我有一个有点奇怪的问题 我想在元素上触发 jquery 验证错误消息 即使它是有效的 设想 我有一个大表格 输入之一是 PersonalId 可以选择输入该 PersonalId 除了该输入之外 我还有一个普通按钮 不是提交按钮 如果您单击
  • 通过 Internet 发送对象

    我定义一个类 然后设置该类类型的一个对象 我想透明地将该对象发送到另一台计算机上运行的另一个 Java 应用程序 实现这一目标的最佳技术是什么 您需要首先研究 Java 的序列化可串行化 http java sun com javase 6
  • 使用nodejs中的直通流模块使用axios发送文件

    Imports const ffmpegPath require ffmpeg installer ffmpeg path const FfmpegCommand require fluent ffmpeg const fs require
  • React Django WebSocket 连接挑战

    我面临的挑战是尝试将 Django 后端与 React 前端应用程序连接起来 我收到的错误是 WebSocket connection to ws localhost 8000 ws week failed callee Week jsx
  • 在 powershell 中停止然后启动进程

    我想停止 终止某个进程 然后在完成我必须做的事情后再次启动它 这是我已经拥有的 Clear host processes Get Process devenv processes Count if processes Count gt 1
  • 如何将asp.net MVC详细视图数据导出到excel文件?

    如何将 ASP NET MVC 视图数据导出到 Excel 文件 实际上我的视图页面包含许多视图数据类型 我使用这些数据类型的每个循环来在视图页面上显示数据 我的要求是我想将显示的数据导出到Excel文件中 我该如何实现这一目标 Thank
  • FullCalendar - 提取显示的事件

    是否有可能发现 提取当前显示的来自 FullCalendar 对象的事件 参考 http arshaw com fullcalendar http arshaw com fullcalendar 理想情况下 我希望在日历旁边有一个事件的辅助
  • Java中String.length()的时间复杂度是多少?

    是 O n 还是 O 1 通过在字符串分配给对象期间将长度保存在私有变量中 如果是O n 是否意味着下面代码的复杂度是O n 2 for int i 0 i
  • 检查 URL 是否存在 - HTTP 请求总是返回异常

    有很多关于如何检查 URL 是否有效的帖子 它们都具有基本相同的代码 这似乎适用于每个人 但不适合我 我不明白为什么 public static bool ifURLexists string url try var request Web
  • 向团队传递 TFS 构建状态通知的最佳方式是什么?

    我喜欢在构建中断时 TFS 警报机制发送的状态电子邮件 但是 我想向整个团队发送这样的电子邮件 而不是依赖团队订阅警报 在覆盖 OnBuildBreak 并使用 MSBuild 社区任务电子邮件任务时 我自己很难生成足够详细的消息 有没有办
  • sys.stdin 读取什么?

    我了解了如何打开文件 然后使用 Python 的预内置函数来处理它们 但是 sys stdin 是如何工作的呢 for something in sys stdin some stuff here lines sys stdin readl
  • Android 8.0 上的 BLE 扫描

    我开发了一个应用程序 可以扫描附近的设备 周围有多种信标 我正在使用带有 CALLBACK TYPE ALL MATCHES 和空 ScanFilter 数组的 BluetoothLeScanner 进行扫描 因为我想获取所有附近设备的回调
  • LINQ - 查询语法与方法链和 lambda [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi