C#嵌套列表筛选未返回预期结果,求问题排查
问题出在哪
你写的代码是筛选包含至少一个匹配Skill的Test对象,而不是对Test里的Skills列表做过滤。所以返回的是原Test对象(这个Test确实有符合条件的Skill),但它的Skills还是原来完整的4项,并没有被过滤,这才导致你看到返回了全部Skill。
正确写法
根据你的需求,两种常见实现方式:
要保留Test结构,只留匹配的Skill
需要重新构造Test对象,把内部的Skills过滤后赋值:
var searchTerm = "Java"; var filteredList = list .Where(t => t.Skills.Any(s => s.SkillName.Contains(searchTerm))) .Select(t => new Test { Name = t.Name, Skills = t.Skills.Where(s => s.SkillName.Contains(searchTerm)).ToList() }) .ToList();
直接拿所有匹配的Skill(不需要Test结构)
把所有Test的Skills合并后再筛选:
var searchTerm = "Java"; var filteredSkills = list .SelectMany(t => t.Skills) .Where(s => s.SkillName.Contains(searchTerm)) .ToList();
内容的提问来源于stack exchange,提问作者Izzy
相关产品推荐
相关产品推荐

