扩展方法语法与查询语法[重复]

2023-12-05

我正在尝试了解是否有合适的时机使用标准 linq 关键字或带有 lambda 表达式的 linq 扩展方法。他们似乎做同样的事情,只是写法不同。这纯粹是风格问题吗?

var query = from p in Products
    where p.Name.Contains("foo")
    orderby c.Name
    select p;

// or with extension methods:
var query = Products
    .Where(p => p.Name.Contains("foo"))
    .OrderBy(p => p.Name);

它们与第二个示例非常相似,第二个示例更简洁,但如果您不知道 => 正在做什么,则可能缺乏表达力。

除了编写简洁的代码之外,使用扩展方法相对于 LINQ 语法还有其他优点吗?


老实说,有时一旦您开始使用 Funcs 和 Actions,情况可能会有所不同。假设您正在使用这三个函数:

  Func<DataClasses.User, String> userName = user => user.UserName;
  Func<DataClasses.User, Boolean> userIDOverTen = user => user.UserID < 10;
  Func<DataClasses.User, Boolean> userIDUnderTen = user => user.UserID > 10;

正如你所看到的,第一个替换了 lamdba 表达式来获取用户名,第二个替换了用于检查 ID 是否低于 10 的 lamdba 表达式,面对现实,第三个现在应该很容易理解了。

注意:这是一个愚蠢的例子,但它确实有效。

  var userList = 
    from user in userList
    where userIDOverTen(user)
    select userName;

Versus

  var otherList =
    userList
    .Where(IDIsBelowNumber)
    .Select(userName)

在此示例中,第二个稍微不那么冗长,因为扩展方法可以充分利用 Func,但 Linq 表达式不能,因为它只是查找布尔值而不是返回布尔值的 Func。然而,这就是使用表达式语言可能更好的地方。假设您已经有了一个不仅仅接受用户的方法:

  private Boolean IDIsBelowNumber(DataClasses.User user, 
          Int32 someNumber, Boolean doSomething)
  {
    return user.UserID < someNumber;
  }

注意: doSomething 之所以存在,是因为 where 扩展方法可以使用接受用户和整数并返回布尔值的方法。这个例子有点烦人。

现在,如果您查看 Linq 查询:

  var completeList =
     from user in userList
     where IDIsBelowNumber(user, 10, true)
     select userName;

你很擅长。现在扩展方法:

  var otherList =
    userList
    .Where(IDIsBelowNumber????)
    .Select(userName)

如果没有 lambda 表达式,我真的无法调用该方法。所以现在我要做的是创建一个方法,该方法根据原始方法调用创建一个 Func 。

   private Func<DataClasses.User, Boolean> IDIsBelowNumberFunc(Int32 number)
   {
      return user => IDIsBelowNumber(user, number, true);
   }

然后插入:

  var otherList =
     userList
     .Where(IDIsBelowNumberFunc(10))
     .Select(userName)

所以您可以看到,有时使用查询方法可能会更容易。

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

扩展方法语法与查询语法[重复] 的相关文章

  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • Android:如何在双卡手机中使用特定 SIM 卡发送短信?

    我找到了一些code这样做 但它给了我一个异常 尝试在空对象引用上调用虚拟方法 java lang Class java lang Object getClass 我正在使用我的 Moto G 第三代进行测试 以下是代码 如果我遗漏了任何内
  • Prolog:将数字拆分为递增整数的序列

    在大学里做了一些 Prolog 并做了一些练习之后 我决定进一步深入 尽管我必须承认我不太了解递归 我明白了概念和想法 但如何编码它对我来说仍然是一个问题 所以这就是为什么我很好奇是否有人知道如何帮助解决这个问题 这个想法有一个数字 例如4
  • 在不同目录中找到 SQLite 数据库

    一般SQLite数据库位于 data data PACKAGE NAME databases DBNAME但我发现数据库在 data user 0 PACKAGE NAME databases DBNAME一台设备中的路径 那么 为什么在单
  • 男孩的 htaccess 301 重定向

    我需要有关 httaccess 重写规则的帮助 我的一位客户说 网站 abc com 应该仅将来自 google bing 和 yahoo 搜索引擎机器人的流量 带有 301 重定向 发送到 cba com 否则显示 index html
  • 显示或重定向 shell 的作业控制消息

    TL DR 所有作业控制 崩溃消息在函数内出现时都会被隐藏 我将在下面详细介绍 但是 Barmar指出可以通过在函数内运行崩溃的二进制文件来重现此问题 例如 crun tmp faulty 1 2 3 我在我的中定义了一个函数 zshrc使
  • 使用 Canvas 创建极地面积图

    我正在尝试使用画布创建极地面积图 http jsfiddle net wm7pwL2w 2 Code var myColor ff0 00f 002 003 004 var myData 10 30 20 60 40 var myRadiu
  • summarise_all 与“n()”函数

    我正在总结 dplyr 中的数据框summarize all 功能 如果我执行以下操作 summarize all mydf list mean mean median median sd sd 我得到了一个包含 3 个变量的小标题 用于我
  • 如何使用java创建一个简单的spark graphframe?

    基本上我是一名 Java 开发人员 现在我有机会从事 Spark 工作 我了解了 Spark api 的基础知识 例如 SparkConfig SparkContaxt RDD SQLContaxt DataFrame DataSet 然后
  • 如何在Python中删除字节顺序标记

    这个问题与我报告的 Stack Overflow API 最近的更改有关here 在这个问题中 我收到了response这似乎可行 但实际上我无法使其发挥作用 这是我的代码 import requests import json url h
  • 如何从 50x3 矩阵创建 50x3 元胞数组。继续只获取带有 50x3 子矩阵的 1x1 元胞数组吗?

    使用此代码 但它一直只给我一个 1x1 元胞数组 mynewcellarray mat2cell oldmatrix 50 3 你应该使用num2cell mynewcellarray num2cell oldmatrix
  • 在 Openmp (C++) 中销毁线程

    是否可以销毁 OpenMP 创建的线程 当程序启动时 只有一个线程 在并行化部分之后 由于存在线程池 因此仍保留多个线程 并行部分运行后有什么方法可以销毁这个池吗 我问是因为我在动态库中使用 OpenMP 并且在线程运行时无法关闭库句柄 程
  • iPhone SDK 4 - 如何以编程方式检测音量硬件按钮按下情况?

    您如何检测用户是否按下音量硬件按钮并防止默认行为 多谢 Look at AVSystemController SystemVolumeDidChangeNotification 或者也可以here
  • 为什么A类采用协议不能满足ProtocolliB要求

    我创建了下面的游乐场代码 以说明我在当前项目中遇到的困难 谁能帮助我理解最后一行的编译器错误 import Foundation This Compiles protocol Protocol1 AnyObject var related
  • 如何强制使用 SVG 元素显示的图像覆盖整个宽度和高度

    我使用生成了模糊图像svg元素 我希望它覆盖屏幕的整个宽度和高度 现在为了更好地理解我在下面提供两个小提琴以及最后我想要实现的结果 Fiddle 1 图像模糊 但没有覆盖整个屏幕 Fiddle 2 图像不模糊 但覆盖了整个屏幕 我想要的结果
  • 评估字符串作为条件 PHP

    我有一个自定义验证规则模块 本质上允许用户设置 CSV 验证 我的问题是我把它放到这个数组中 Array field name gt is int 324230435 some other field gt strlen some str
  • 访问视图模型类中的统一容器

    我有一个看起来像工具栏的外壳 它定义了我的主要区域 包裹面板 我需要做的是能够将小部件添加到外壳中 并且当单击小部件时 会打开一个新窗口 视图 以下是我到目前为止所拥有的 我创建了一个模块类 它将视图添加到主区域 public class
  • Pandaic 方法检查数据帧是否有任何行[重复]

    这个问题在这里已经有答案了 给定一个数据框df 我会应用一些条件df condition 并检索一个子集 我只想检查子集中是否有任何行 这会告诉我条件是有效的 In 551 df Out 551 Col1 0 1 1 2 2 3 3 4 4
  • Uploadive动态发布输入变量

    下面的问题是 当函数启动的时候 当然 MyInputVariable是空的 function file upload uploadifive auto false dnd true checkScript check exists php
  • 如何序列化属性内具有闭包的对象?

    if I do serialize obj I get 不允许序列化 Closure 序列化时有什么方法可以忽略这些闭包吗 无论如何 当我反序列化字符串时 我不需要它们 这些属性的值可以为空或其他 我的班级看起来像这样 Class Node
  • 扩展方法语法与查询语法[重复]

    这个问题在这里已经有答案了 我正在尝试了解是否有合适的时机使用标准 linq 关键字或带有 lambda 表达式的 linq 扩展方法 他们似乎做同样的事情 只是写法不同 这纯粹是风格问题吗 var query from p in Prod