You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用非查询表达式的LINQ GroupBy过滤重复GroupId/UserId对象?

用GroupBy过滤重复的GroupId/UserId组合

你之前的代码问题出在分组键只选了GroupId,但我们要去重的是GroupId + UserId的组合对,所以得把这两个字段一起作为分组的依据才行。

先给你直接上可运行的代码,假设你的集合元素是一个叫GroupUser的类(包含GroupId和UserId属性):

// 假设groupUsers是你的原始群组用户集合
var distinctGroupUsers = groupUsers
    // 核心:用GroupId和UserId的匿名类型作为分组键,把重复的组合归为一组
    .GroupBy(x => new { x.GroupId, x.UserId })
    // 每组取第一个元素(组里的元素都是重复项,取任意一个都可以)
    .Select(g => g.First())
    .ToList();

如果你想严格用你一开始尝试的那个带三个参数的GroupBy重载,也可以这么写:

var groupByResults = groupUsers
    .GroupBy(
        // 第一个参数:分组键,必须是GroupId+UserId的组合
        keySelector: x => new { x.GroupId, x.UserId },
        // 第二个参数:保留整个GroupUser对象作为分组元素
        elementSelector: x => x,
        // 第三个参数:从每组取一个元素完成去重
        resultSelector: (key, group) => group.First()
    )
    .ToList();

逻辑说明

  • 匿名类型new { x.GroupId, x.UserId }会自动对比两个属性的值,只有当两者完全相同时,才会被分到同一个分组中。
  • 每个分组里的元素都是重复的GroupUser对象,所以取First()(或Last(),只要每组至少有一个元素即可)就能得到唯一的那一行。

这样处理后,你的集合里就不会存在重复的GroupId/UserId组合了。

内容的提问来源于stack exchange,提问作者user9393635

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:52:28