我有两种不同类型的对象,这些对象的ID字段可能具有匹配的ID。 FindAll操作返回正确的非匹配对象,而Where操作返回所有对象。有人可以帮我理解为什么吗?
var _kenticoIDs = new HashSet<string>(_kenticoSessions.Select(p => p.AttendeeInteractiveSessionID));
var list = _aiSessionIDList.FindAll(p => !_kenticoIDs.Contains(p.SessionID));
var ienum = _aiSessionIDList.Where(p => !_kenticoIDs.Contains(p.SessionID));
编辑:如果我对resultA变量执行.ToList(),则结果列表与结果变量相同。但是,当我在.ToList()之前检查两个变量(result / resultA)时,一个有6个值,一个有63个值。我觉得我错过了一些明显的东西。
答案 0 :(得分:5)
Where
和FindAll
是等效的,但在执行方面,Where
是延迟的,但FindAll
是即时的。
来源:This SO帖子。
答案 1 :(得分:2)
我认为您遇到的问题是了解Linq。 Where is a Linq extension method而FindAll是List方法。 Linq表达式在枚举之前或转换为列表/数组时不会被评估。