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

如何使用LINQ筛选两个列表中名称匹配的对象并返回指定属性

正确实现方案

错误原因说明

  • 第一次使用All方法逻辑错误:All要求persons列表中所有对象的Name都和当前匹配项的Name相等,除非persons列表只有一个元素且完全匹配,否则必然返回空结果。
  • 第二次Contains方法参数类型不匹配:persons是Person类型的集合,无法直接匹配字符串类型的x.Name,所以抛出类型转换错误。

推荐实现方式

首先优先提取persons的Name为哈希集合,匹配效率更高,尤其适合数据量较大的场景:

// 提取待匹配姓名集合,添加StringComparer.OrdinalIgnoreCase可实现大小写不敏感匹配(适配james/James的场景)
HashSet<string> matchNames = persons.Select(p => p.Name).ToHashSet(StringComparer.OrdinalIgnoreCase);

// 执行LINQ查询,返回仅包含Name和Country的结果集
var result = MyListOfObjects
    .Where(obj => matchNames.Contains(obj.Name))
    .Select(obj => new 
    {
        obj.Name,
        obj.Country
    })
    .ToList();

小数据量简易写法

如果数据量很小,也可以直接用Any方法实现,无需提前提取集合:

var result = MyListOfObjects
    .Where(obj => persons.Any(p => p.Name.Equals(obj.Name, StringComparison.OrdinalIgnoreCase)))
    .Select(obj => new { obj.Name, obj.Country })
    .ToList();

补充注意事项

你提供的persons初始化语法存在错误,正确的对象集合初始化写法如下:

private static IEnumerable<Person> persons = new[]
{
    new Person { Name = "James" },
    new Person { Name = "Jimmy" }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:04