Linq FindAll和Where返回不同​​的结果

时间:2012-07-23 19:27:31

标签: c# linq

我有两种不同类型的对象,这些对象的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个值。我觉得我错过了一些明显的东西。

2 个答案:

答案 0 :(得分:5)

WhereFindAll是等效的,但在执行方面,Where是延迟的,但FindAll是即时的。

来源:This SO帖子。

答案 1 :(得分:2)

我认为您遇到的问题是了解Linq。 Where is a Linq extension method而FindAll是List方法。 Linq表达式在枚举之前或转换为列表/数组时不会被评估。