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

如何按ProductId对List<List<ProductFilter>>求交集并返回ProductFilter?

解决按ProductId求交集并返回ProductFilter对象的问题

当然可行!你现在遇到的编译错误,核心原因是当前代码只提取了ProductId做交集运算,最终得到的是List<int>类型的结果,但Aggregate期望每次迭代的返回类型和初始集合的类型(List<ProductFilter>)一致,所以类型不匹配导致报错。

咱们可以分两步来实现需求:

  1. 先找出所有子列表中共同存在的ProductId集合
  2. 根据这些共同的ProductId,从原集合中筛选出对应的ProductFilter对象

修正后的代码示例

// 第一步:计算所有子列表中共同的ProductId
var commonProductIds = groupList.Aggregate(
    // 初始值取第一个列表的ProductId集合
    groupList.First().Select(x => x.ProductId).ToList(),
    (previousIds, nextList) => 
        previousIds.Intersect(nextList.Select(x => x.ProductId)).ToList()
);

// 第二步:从任意一个子列表(这里选第一个)筛选出对应ProductId的ProductFilter
var intersectionFilters = groupList.First()
    .Where(filter => commonProductIds.Contains(filter.ProductId))
    .ToList();

额外说明

如果你需要的是所有子列表中属于这些共同ProductId的全部ProductFilter对象(比如同一个ProductId在不同子列表里的过滤项都要保留),可以调整第二步的代码:

var allIntersectionFilters = groupList.SelectMany(list => 
        list.Where(filter => commonProductIds.Contains(filter.ProductId))
    ).ToList();

这样就能完美解决类型不匹配的问题,同时精准获取你需要的ProductFilter对象集合啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:26:11