我将用一个例子来解释它。
假设我有一个学生对象列表,其中是学生班级,
class Student
{
public int RollNo {get; set;}
public string Name { get; set; }
public int StateId { get; set; }
}
和包含特殊StateIds的List
List<int> specialStateIds;
现在我想从Students List中提取不属于specialStates的RollIds列表。目前我正在做如下。
List<int> NonSpacialRollIds = Students.Where(s =>
!specialStateIds.Contains(s.StateId)).Select(s => s.RoleIds).ToList();
但不知怎的,我觉得,可以使用Linq进一步优化,并且可以避免使用Contains扩展方法收集。
答案 0 :(得分:4)
您可以创建一组状态ID以加快搜索速度,因为哈希集上的Contains()
操作是O(1),列表上的Contains
是O(N):
HashSet<int> ids = new HashSet<int>(specialStateIds);
List<int> NonSpacialRollIds = Students.Where(s => !ids.Contains(s.StateId))
.Select(s => s.RoleIds)
.ToList();