.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.
相关产品推荐
相关产品推荐

