使用LINQ判断列表值是否存在于另一列表时出现CS1929错误如何解决
错误原因
你编写的查询中,Contains()方法的入参类型错误导致报错:Contains()方法要求传入单个与序列元素类型匹配的对象,但你传入的是(from item in hostelStops select item.hostelName )返回的整个IEnumerable<>集合,类型不匹配,编译器无法找到对应的重载方法,因此抛出CS1929错误。
解决方案
首先提前提取所有hostelName的集合,建议转HashSet<>提升查询效率:
var allHostelNames = hostelStops.Select(item => item.hostelName).ToHashSet();
场景1:对taskList每个条目,判断该条目的taskStart是否包含至少一个匹配的hostelName
var result = taskList.Select(row => new { dutyName = row.dutyName, isHostelExist = row.taskStart.Any(placeId => allHostelNames.Contains(placeId)) }).ToList();
返回的result中每个条目对应原taskList的条目,isHostelExist字段标识该任务的taskStart是否存在匹配的hostelName。
场景2:全局判断是否存在任意一个hostelName出现在任意task的taskStart中
bool isAnyExist = taskList .SelectMany(row => row.taskStart) .Any(placeId => allHostelNames.Contains(placeId));
返回布尔值标识全局是否存在匹配项。
内容的提问来源于stack exchange,提问作者Jey2331129
相关产品推荐
相关产品推荐

