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

如何用LINQ从Form列表中提取去重的Subject列表?

使用LINQ合并并去重嵌套的Subject列表

要合并所有Form关联的Subject并按Id去重,可以通过扁平化嵌套集合 + 按Id去重两步实现,以下是具体方案:

1. .NET 6+ 简洁方案(推荐)

.NET 6及以上版本提供了DistinctBy方法,可以直接指定去重的键(这里用Subject.Id),代码最简洁:

// 假设你有Form对象列表
List<Form> forms = GetYourForms();

var uniqueSubjects = forms
    // 扁平化所有LinkedSubjects,处理null集合避免空引用
    .SelectMany(form => form.LinkedSubjects ?? Enumerable.Empty<Subject>())
    // 按Subject.Id去重
    .DistinctBy(subject => subject.Id)
    // 转成List(按需选择)
    .ToList();

2. .NET 6以下兼容方案

如果项目基于.NET 5或更早版本,没有DistinctBy,可以用GroupBy分组后取每组第一个元素:

var uniqueSubjects = forms
    .SelectMany(form => form.LinkedSubjects ?? Enumerable.Empty<Subject>())
    // 按Id分组,同Id的Subject会被分到一组
    .GroupBy(subject => subject.Id)
    // 取每组的第一个元素(即保留该Id首次出现的Subject)
    .Select(group => group.First())
    .ToList();

注意事项

  • 上述代码会处理LinkedSubjects为null的情况(用?? Enumerable.Empty<Subject>()跳过空集合),避免空引用异常。
  • 如果存在同一Id但Name不同的Subject,上述方案会保留该Id首次出现的Subject实例。若需要自定义合并逻辑(比如合并Name),可以在Select阶段对分组后的元素做额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:43:22