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

如何用LINQ或Angular对比列表行数据并筛选重复配置

解决方案:识别除指定字段外配置相同的数据行

一、LINQ实现(.NET后端)

假设你的数据模型定义如下:

public class ConfigItem
{
    public string ColumnA { get; set; }
    public string ColumnB { get; set; }
    public int ColumnC { get; set; }
    // 其他配置字段...
}

要筛选出除ColumnA外其余字段完全一致的行,可通过GroupBy按排除ColumnA后的字段分组,再筛选包含多个元素的分组:

// 从Service获取数据列表
List<ConfigItem> configList = await _configService.GetConfigListAsync();

// 分组并提取相同配置的行
var duplicateConfigs = configList
    .GroupBy(item => new 
    {
        item.ColumnB,
        item.ColumnC
        // 列出除ColumnA外的所有需要对比的字段
    })
    .Where(group => group.Count() > 1)
    .SelectMany(group => group) // 将分组展开为单元素集合
    .ToList();

逻辑说明:

  • 匿名类型作为分组键:匿名类型会自动按属性值做相等比较,刚好匹配“除ColumnA外所有字段相同”的判定规则。
  • Where(group => group.Count() > 1) 仅保留包含多行的分组,这些就是目标相同配置数据。
  • SelectMany 将分组后的集合展开,直接得到所有符合条件的行。

二、Angular实现(前端)

假设前端接收的数据结构如下:

interface ConfigItem {
  columnA: string;
  columnB: string;
  columnC: number;
  // 其他配置字段...
}

可以用数组reduce方法分组,再筛选出重复配置:

// 从Service获取数据
this.configService.getConfigList().subscribe((configList: ConfigItem[]) => {
  // 按除columnA外的字段分组
  const grouped = configList.reduce((acc, item) => {
    // 生成分组键:将需要对比的字段转为JSON字符串,确保唯一标识
    const key = JSON.stringify({
      columnB: item.columnB,
      columnC: item.columnC
      // 列出所有需要对比的字段
    });
    if (!acc[key]) {
      acc[key] = [];
    }
    acc[key].push(item);
    return acc;
  }, {} as Record<string, ConfigItem[]>);

  // 筛选出多元素分组并展开为结果数组
  const duplicateConfigs = Object.values(grouped)
    .filter(group => group.length > 1)
    .flat();

  // duplicateConfigs即为所有相同配置的行
  console.log(duplicateConfigs);
});

逻辑说明:

  • JSON.stringify将对比字段转为字符串作为分组键,保证相同配置的行生成一致的键。
  • reduce遍历数组,将同键的行归为一组。
  • 最后筛选长度大于1的组,用flat展开得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:17:12