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

LINQ嵌套DTO查询求助:根据姓名批量获取DOB

批量获取指定姓名对应的DOB值(LINQ实现)

数据结构示例

先明确你的嵌套数据结构对应的实体类定义:

// DTOData列表中的单个项
public class DTODataItem
{
    public List<Table> Tables { get; set; }
}

// 嵌套的Table类
public class Table
{
    public string Name { get; set; }
    public DateTime DOB { get; set; }
}

LINQ实现方案

假设你有:

  • List<DTODataItem> dtoData:源数据列表
  • List<string> targetNames:需要匹配的目标姓名列表

方案1:获取所有匹配的DOB(含重复项)

如果同一个姓名在多个Table中出现,会返回所有对应的DOB值:

var matchedDobs = dtoData
    // 展开所有嵌套的Tables集合
    .SelectMany(item => item.Tables)
    // 筛选姓名在目标列表中的项
    .Where(table => targetNames.Contains(table.Name))
    // 提取DOB字段
    .Select(table => table.DOB)
    .ToList();

方案2:按姓名去重,保留每个姓名的首个DOB

若要避免重复,确保每个姓名仅返回一个DOB(取首次匹配的结果):

var uniqueDobs = dtoData
    .SelectMany(item => item.Tables)
    .Where(table => targetNames.Contains(table.Name))
    // 按姓名分组,取每组第一个项的DOB
    .GroupBy(table => table.Name)
    .Select(group => group.First().DOB)
    .ToList();

方案3:返回姓名与DOB的键值对(保留对应关系)

如果需要明确姓名和DOB的对应关系,可返回字典结构:

var nameDobMap = dtoData
    .SelectMany(item => item.Tables)
    .Where(table => targetNames.Contains(table.Name))
    .GroupBy(table => table.Name)
    // 每个姓名对应首个匹配的DOB
    .ToDictionary(group => group.Key, group => group.First().DOB);

优化提示

如果目标姓名列表targetNames数据量较大,建议先转为HashSet<string>提升查询效率:

var nameHashSet = new HashSet<string>(targetNames);
// 后续Where条件替换为:.Where(table => nameHashSet.Contains(table.Name))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:41:04