LINQ GroupBy 使用匿名类型比应有的效果更好

2024-04-13

假设我有一个类定义为:

public class DataHolder
{
    public string PropA { get; set; }
    public string PropB { get; set; }
    public string PropC { get; set; }
    public int PropD { get; set; }
}

并有一个数组的实例DataHolder声明为:

    var x=new DataHolder[]{
        new DataHolder(){PropA="A",PropB="X",PropC="J",PropD=1},
        new DataHolder(){PropA="A",PropB="Y",PropC="J",PropD=3},
        new DataHolder(){PropA="A",PropB="Y",PropC="J",PropD=5},
        new DataHolder(){PropA="B",PropB="X",PropC="K",PropD=7},
        new DataHolder(){PropA="B",PropB="Y",PropC="L",PropD=9},
        new DataHolder(){PropA="C",PropB="X",PropC="J",PropD=11},
        new DataHolder(){PropA="C",PropB="X",PropC="J",PropD=13},
        new DataHolder(){PropA="C",PropB="Y",PropC="J",PropD=15},
        new DataHolder(){PropA="C",PropB="Z",PropC="J",PropD=17}
    };

我对它运行 LINQ GroupBy 查询,如下所示:

    var t = x.GroupBy(c => new { A = c.PropA, B = c.PropB, C = c.PropC })

当我检查结果时,我发现 t 有 7 个元素,这是数组中不同的 PropA、PropB、PropC 组合的数量,这就是我想要的效果(耶!)。但后来我想,它实际上不应该起作用,因为匿名类型的每个新实例都应该与其他实例不相等,并且 t 应该有 9 个元素。为什么它会像我最初想象的那样工作?


因为对于匿名类型:

由于匿名类型的 Equals 和 GetHashCode 方法是根据属性的 Equals 和 GetHashcode 方法定义的,因此仅当同一匿名类型的所有属性都相等时,两个实例才相等。

(取自MSDN http://msdn.microsoft.com/en-us/library/vstudio/bb397696.aspx)

所以他们确实超载了Equals这使得逐个属性的比较变得“理智”。

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

LINQ GroupBy 使用匿名类型比应有的效果更好 的相关文章

随机推荐

  • pytest 无法导入模块,而 python 可以

    我正在用 Python 开发一个包 我使用虚拟环境 我在 virtualenv 的 pth 路径中设置了模块根目录的路径 这样我就可以在开发代码时导入包的模块并进行测试 问题 1 这是一个好方法吗 这工作正常 这是一个例子 这是我想要的行为
  • 使用证书和自定义 ssl 套接字工厂到 ldap 的 SSL 连接

    这是我的场景 我想使用 jndi 连接到 ldap 我使用自定义 SSLSOcketfactory 来读取信任库和密钥库 上下文创建成功 但是当我尝试使用相同的凭据进行身份验证时 它会抛出一个错误 告知不支持该身份验证方法 这是我的自定义
  • 在 JavaScript 或 jQuery 中动态更改 CSS 规则

    我正在寻找一种方法来更改文档中导入的样式表的 CSS 规则 所以我有一个外部样式表和一些class and div里面的属性 我想使用 JavaScript 或 jQuery 更改其中一项规则 这是一个例子 red color red 所以
  • 用java将图像写入pdf文件

    我正在编写一个代码 将 Microsoft power point ppt 幻灯片转换为图像 并将生成的图像写入 pdf 文件 以下代码生成图像并将其写入 pdf 文件 但我面临的问题是 当我将图像写入 pdf 文件时 它的大小超出了 pd
  • 通过Powershell为证书私钥分配权限(Win 2012 R2)

    在附加到域的 Windows Server 2012 R2 计算机上 我运行以下语句 target machine fqdn System Net Dns GetHostByName env computerName certificate
  • Javascript clientHeight 和替代方案

    我目前正在尝试修改一个 滑入 的 Javascript 函数 该脚本要求您定义 div 的高度 因此它在动态填充的 中几乎没有用处 我在 javascript 中的 clientHeight 属性上发现了一些文本 但它似乎不支持将显示设置为
  • 如何将浮点数包装到区间 [-pi, pi)

    我正在寻找一些可以有效完成的不错的 C 代码 while deltaPhase gt M PI deltaPhase M TWOPI while deltaPhase lt M PI deltaPhase M TWOPI 我有什么选择 更新
  • Git Status 使用 Cygwin 挂起

    在我的 Windows 机器上 我有一个可以与 msysgit 很好地配合的存储库 但当我尝试跑步时git status在 cygwin 上 它只是挂起 不打印任何内容 直到我按 Ctrl C 我怎样才能调查这个问题以找出这种行为的原因 造
  • 使用 getid3 (id3v2) 将 APIC 写入 mp3 文件

    我正在尝试使用 getid3 将 APIC 图片写入 mp3 文件 这是代码 cover home user public html artwork cover jpg TagData attached picture array pict
  • LINQ:从列表中选择项目(分组/选择/求和和最大值!)

    我只是沉浸在 Linq 中并享受很多乐趣 任何人都可以帮助我查询以下内容 我有一个数据列表 Key Value Aaa 12 AaA 10 AAa 5 BBB 2 Bbb 1 1 I want to group by Key ToUpper
  • BOOST_PP_REPEAT 带数组

    我的结构如下 struct E1 typedef boost tuple lt boost optional lt N type A gt N namespace boost optional lt N type B gt boost op
  • 如何使用多个朋友的 Facebook ID 在他们的墙上发帖

    在我的应用程序中 我需要将图像和消息发布到多个朋友的墙上 我看过关于这个问题的 stackoverflow 帖子 我发现需要批量请求概念来做到这一点 我不明白 如何创建 json 对象 我在一些帖子中看到 我们不能一次发布超过 10 个帖子
  • 如何在javascript中编写Or条件?

    这是对的吗 if expiryMonth MM expiryMonth mm 对 那是正确的 MDC Mozilla 开发者中心 有有关逻辑运算符的大量信息 https developer mozilla org en JavaScript
  • 如何在我的命名空间中使用默认的 php 类?

    我正在使用命名空间来解决项目中使用的两个 SDK 中的类名冲突 我已经在其中一个文件中声明了一个名称空间 例如 namespace temp class abc extends stdClass my class def 当我点击这段代码时
  • Apple 推送通知服务:证书安装服务器端?

    我已按照以下说明进行操作如何构建 Apple 推送通知提供程序服务器 教程 http blog boxedice com 2009 07 10 how to build an apple push notification provider
  • Pandas 在 Groupby 中重新索引日期

    我有一个以零星日期作为索引的数据框 列 id 和 num 我想pd groupby id 列 并将重新索引应用于数据框中的每个组 我的示例数据集如下所示 id num 2015 08 01 1 3 2015 08 05 1 5 2015 0
  • 获取 iPhone 唯一 ID 的 API?

    两部分问题 除了 MAC 地址之外 iPhone 是否还有唯一的 ID 如果是这样 我可以使用 API 调用来获取它吗 希望这不是重复的 我找不到任何东西 iPhone 确实有一个唯一标识符 称为 UDID 这与设置设备进行开发或进行临时分
  • DT with Shiny:多页可编辑数据表在编辑后跳转到第一页

    我有以下程序 正如标题所示 每次我在第一页之后的页面上编辑项目时 表格都会返回到第一页 我希望表格保留在我正在编辑的页面上 而不跳回到第一页 我在这里的其他线程上看到了这个问题 但他们的解决方案似乎不适用于当前版本DT and shiny包
  • foreach,性能方面。我们应该在循环之前或内部声明一次变量吗?

    在 foreach 语句外部声明变量并每次在其内部分配它 foreach 或在 foreach 内创建一个新变量对于性能更好 例如 private List
  • LINQ GroupBy 使用匿名类型比应有的效果更好

    假设我有一个类定义为 public class DataHolder public string PropA get set public string PropB get set public string PropC get set p