Linq GroupBy 将每个空值作为一个组

2024-01-17

我有一个具有可为 null int 属性“GroupId”的对象。

有了这个对象的列表,我想对此“GroupId”执行 GroupBy 操作。但如果我这样做,所有空值将形成一个组。

例子 :

对象 1:GroupId:NULL

对象 2:GroupId:NULL

对象 3:组 ID:1

对象 4:组 ID:1

对象 5:组 ID:2

对象 6:组 ID:2

MyList.GroupBy(f => f.GroupId, key => new {Object = key});

我会分3组。

我怎样才能得到4组呢?每个 NULL 值一组...


这可能是最短的解决方案:

var grouped = MyList.GroupBy(f => f.GroupId != null ? (object)f.GroupId : new object(), key => new { Object = key });

请注意,组的“密钥”将是object类型。为了null元素我创建了一个新的“空”object。对象的相等比较器将使它们都不同。对于非空数字,我只需将它们装在一个对象中。装箱整数保留相等运算符。所以:

new object().Equals(new object()) == false // always

and

((object)1).Equals((object)1) == true // always

and

((object)1).Equals((object)2) == false // always

更正确的解决方案是实施IEqualityComparer<int?>

public class MyComparer : IEqualityComparer<int?> {
    public bool Equals(int? x, int? y) {
        if (x == null || y == null) {
            return false;
        }

        return x.Value == y.Value;
    }

    public int GetHashCode(int? obj) {
        return obj.GetHashCode(); // Works even if obj is null :-)
    }
}

并使用它:

var grouped2 = MyList.GroupBy(f => f.GroupId, key => new { Object = key }, new MyComparer());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linq GroupBy 将每个空值作为一个组 的相关文章

  • 不同文件中的相同静态变量[重复]

    这个问题在这里已经有答案了 HI 欢迎大家回答这个问题 Q1 如果 File1 c 包含 static int a File2 c 包含 static int a 如果这两个文件是同一项目的一部分 如果是的话 编译会抛出任何错误吗 如果它不
  • 为什么我需要显式编写“auto”关键字?

    我正在从 C 98 转向 C 11 并且已经熟悉了auto关键词 我想知道为什么我们需要明确声明auto编译器是否能够自动推导类型 我知道 C 是一种强类型语言 这是一条规则 但如果不显式声明变量就不可能实现相同的结果auto 放弃显式的a
  • JQuery、ASCX 和 webmethods 似乎不起作用

    我有一个级联下拉列表 其中 3 个 类型 类别和子类别 首先类型负载 然后选择类型 类别负载以及选择类别 子类别负载 我还有 2 个按钮 添加类别 和 添加子类别 单击这些按钮后 我调用 JQuery 模态表单来添加它们 我在代码后面使用
  • 如何在 ASP.Net Core 6 Web Api 中依赖注入 Microsoft Graph 客户端

    我正在尝试使用 ASP Net Core 6 设置 Web api 以便用户可以到达我的端点 然后我使用特权帐户在 Teams 中执行一些工作 我认为我没有正确连接 DI 部分 因为在向 Teams 发出请求时出现以下错误 MsalUiRe
  • 进入嵌入式[关闭]

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

    我正在运行 OS X Sierra 并尝试编译一个使用的 c 程序strcpy s 但是我安装的 clang 编译器使用的是 c99 标准 但是据我读到的 https embeddedgurus com barr code 2017 08
  • C# SMO 远程数据库备份到本地机器

    我有一个执行 SQL 数据库备份和恢复的应用程序 这在本地计算机上运行良好 但是如果我针对另一台计算机上托管的 SQL 服务器运行此应用程序 则会出现以下错误 Microsoft SqlServer Management Smo Faile
  • 使用 C# 启动 Outlook

    我可以让 C 在代码中启动 Outlook 吗 在 VB6 中 我们使用对象 Outlook Application 并编写 Set oOutlook CreateObject Outlook Application Set oNameSp
  • std::string substr 方法问题

    你好 我正在写这个方法 我希望它从给定缓冲区中提取给定位置的一部分 我有一个像这样的字符串something one something two我想要得到 一个 这是我的想法 static std string Utils getHeade
  • FxCop 和 GAC 疯狂

    当我尝试分析依赖于模式和实践 企业库数据 以及其他 2 0 0 0 的项目时使用 FxCop FxCop 抱怨它不能 定位程序集引用 即使正在分析的应用程序 dll 是根据其编译的此版本及其在 GAC 中 如果我浏览到 GAC 尝试选择相同
  • 调用 Console.ReadLine() 的方法的 C# 单元测试

    我想为名为的类的成员函数创建一个单元测试ScoreBoard它存储了一场比赛中排名前五的球员 问题是我为 SignInScoreBoard 正在呼叫Console ReadLine 这样用户就可以输入他们的名字 public void Si
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • IOS Box2D - 身体遵循基于速度波动的点数组的特定路径

    我有一个关于身体的问题 它遵循特定的路径 首先是将身体移动到目标点的方法 const float destinationControl 0 3f b2Vec2 targetPosition path counter b2Vec2 missi
  • ld: 无法对非 PE 输出文件执行 PE 操作错误

    我是操作系统编程的新手 我正在读一本书 其中给出了一个简单的内核示例 如下所示 main char video memory 0xb8000 video memory X 为了编译这个名为 kernel c 的文件 我在 Windows 7
  • 在运行时生成可执行文件

    好吧 所以我想知道如何创建一个程序 该程序创建第二个程序 就像大多数压缩程序如何创建自解压自可执行文件一样 但这不是我需要的 假设我有 2 个程序 每个都包含一个类 我将使用一个程序来修改类并用数据填充类 第二个文件将是一个也具有该类的程序
  • 是否有普遍接受的 GMP 替代方案来实现任意精度? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在寻找 BigInt 库的过程中 我发现了这篇文章 Microsoft Windows 上的 C 或
  • 如何同时正确使用管道和信号?

    我有 2 个孩子 我想将信号从孩子发送到父母 并将答案 随机数 为什么 为什么不 命名管道从父母发送到每个孩子 我有这个代码 include
  • 阅读《Effective、MoreEffective 和Effective Modern C++(和 STL)》的首选顺序是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 据我所知 More effective C 是 Effective C 的扩展 而 Effective Modern C 则专注于 C 11 和
  • WPF - 将窗口置于前面

    我有一个 WPF 窗口 我没有关闭它 相反 我执行 Hide 和 Show 它 现在 当我双击记录上网格中的主窗口时 这将触发 Show 窗口 该窗口将始终显示在主窗口后面 我尝试过以下方法 但没有成功 view Show view Act
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • 如何在 libcurl 中禁用 Expect 100 continue

    我正在使用 CURLOPT POST 发送 https 消息 在运行过程中 我的应用程序停留在 期望 100 继续 完成等待 100 继续 From 乔治的日志 当curl发送100 继续时 https gms tf when curl s
  • 如何在 Swift 中将字符串(数字)转换为 Int 数组

    我想知道如何在 Swift 中将 String 转换为 Int 数组 在Java中我总是这样做 String myString 123456789 int myArray new int myString lenght for int i
  • 无法在 Google Chrome 中获取 JSON 文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Chrome 中使用本地文件的 jQuery getJSON 问题 https stackoverflow com questions 2541949 problems with jquery g
  • webgl 中的多个对象

    我正在尝试将一些对象渲染到画布上 但我在理解哪些内容不起作用时遇到了一些困难 我目前正在构建两个对象 它们代表我想要渲染的两个网格 如果我创建一个网格 代码可以正常工作 所以我认为问题在于 当我构建两个或更多网格时 数据会被搞砸 这是网格数
  • 对于 FragmentStatePagerAdapter 创建的 Fragment,Fragment getView() 始终返回 null

    我读了很多关于片段的文章 发现其他人在检索片段视图时遇到问题 因为总是返回 null 但没有答案解决我的问题 我想做的是创建一个图片库 我有一个包含图像视图的片段 为了显示片段 我使用 android support v4 view Vie
  • 具有多个源的 Optaplanner 影子变量

    Optaplanner 允许影子变量拥有多个源 sources 但只有一个variableListsnerClass 在我的实现中 我有一个带有影子变量的规划实体 应该能够由两个列表器更改 但这似乎不受支持 还是我错了 有没有办法让两个监听
  • Java 9中外部模块A和B将包some.package导出到模块C

    当我使用外部库运行应用程序时 我得到以下信息 Error occurred during initialization of boot layer java lang module ResolutionException Modules m
  • 在 JavaScript 中使用正则表达式删除下划线

    就像标题所说 我想用正则表达式删除字符串中的下划线 这就是我所拥有的 function palindrome str str str toLowerCase replace a zA Z g s g 0 9 g if str split r
  • 为什么java在SSL握手期间不发送客户端证书?

    我正在尝试连接到安全的网络服务 尽管我的密钥库和信任库已正确设置 但握手失败 经过几天的沮丧 无休止的谷歌搜索和询问周围的每个人 我发现唯一的问题是java选择在握手期间不将客户端证书发送到服务器 具体来说 服务器请求客户端证书 CN Ro
  • Gmail API 配额单位费用

    我们正在构建一项利用 Gmail API 的服务 为了了解我们在扩展过程中的成本 我想知道使用 Gmail API 的成本是多少 我已按照以下说明进行操作https developers google com gmail api v1 re
  • 从 Portlet 中删除自定义权限/操作

    我已经能够根据 Liferay Plugins SDK 中的示例定义自定义 portlet 操作 权限 https github com liferay liferay plugins tree master portlets sample
  • 如何在 Ubuntu 14.04 中使用 systemctl

    我尝试在 Ubuntu 14 04 中执行以下命令 systemctl enable now docker cleanup dangling images timer 我也用 sudo 尝试过 我尝试用 service 和 systemd
  • 按最后一个数组条目字段值过滤结果

    具有此文档结构 为了简洁省略不相关的字段 id 0 partn date ISODate 2015 07 28T00 59 14 963Z is partner true date ISODate 2015 07 28T01 00 32 7
  • Javascript,写入txt文件另存为UNICODE

    我有2根弦 希望首先创建一个 txt 文件 然后将字符串保存为 unicode function WriteFile file str str2 var tmp real url replace 20 g var WshNetwork ne
  • 根据 java.io/java.nio 进行阻塞

    我刚刚读 使用流的类位于两个包中 java io 和 java nio 以前实现的类 输入 输出 I O 阻塞 当字节被读 写时 进程中 它们对于其他执行线程变得不可用 这 后一个包提供非阻塞 I O 并提高了性能 并且想更多地了解这一点
  • Automapper 可以忽略 void 方法吗?

    我是 Automapper 的新手 所以我不确定这是否可行 我想映射一个类 但让它忽略无效的方法 下面是我的代码的说明 当我运行这个时 我收到以下异常消息 AutoMapper AutoMapperMappingException 类型的未
  • 如何将 JavaScript 函数传递给 Silverlight?

    我正在评估 JavaScript Silverlight 互操作功能 并且已经能够使用 JavaScript 创建 Silverlight 实例并调用其方法 但是 我现在需要一种将 JavaScript 回调函数传递给 Silverligh
  • iPhone OS 中的核心动画中的“图像错位”是什么?

    Instruments 表示存在由核心动画制作的 未对齐的图像 这意味着什么 更新 我在 Instruments app gt 核心动画中看到了这一点 我希望了解有关您在哪里看到此内容的更多信息 但我怀疑它指的是未像素对齐的图像 Quart
  • UDP 服务与亚马逊网络服务

    再会 我在一个硬件项目的基于云的系统中经常使用 AWS 使用 SimpleDB 和提供的通知服务很棒 然而 我需要 AWS 上的一个后端来监听传入的请求 处理请求并将其发送回特定地址 某种 UDP 服务 我可以轻松地为其编写一个 C C 应
  • Linq GroupBy 将每个空值作为一个组

    我有一个具有可为 null int 属性 GroupId 的对象 有了这个对象的列表 我想对此 GroupId 执行 GroupBy 操作 但如果我这样做 所有空值将形成一个组 例子 对象 1 GroupId NULL 对象 2 Group