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

.NET Core下按规则实现LINQ查询结果去重过滤的问题

解决方案

修改后的LINQ查询代码如下:

var result = searchResults
    // 规则4:移除Id和ContactId均为空的对象
    .Where(x => x.Id.HasValue || x.ContactId.HasValue)
    // 按Id分组处理
    .GroupBy(x => x.Id)
    // 处理每个Id分组的内容
    .SelectMany(g =>
    {
        // 筛选当前分组下所有带ContactId的记录
        var hasContactItems = g.Where(x => x.ContactId.HasValue).ToList();
        if (hasContactItems.Any())
        {
            // 规则2、3:存在带ContactId的记录时,返回唯一的Id+ContactId配对
            return hasContactItems.DistinctBy(x => new { x.Id, x.ContactId });
        }
        else
        {
            // 规则1:无ContactId记录时,仅保留1条
            return new[] { g.First() };
        }
    })
    // 排序和预期输出格式对齐
    .OrderBy(x => x.Id)
    .ThenBy(x => x.ContactId);

如果你使用的.NET版本低于6,不支持DistinctBy方法,可以将去重逻辑替换为如下写法:

return hasContactItems.GroupBy(x => new {x.Id, x.ContactId}).Select(x => x.First());

运行上述代码输出结果和要求的预期完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:03