从Collection中选择项目的优化方式,不包括使用Linq的某个成员的列表

时间:2014-02-10 15:07:31

标签: c# .net linq

我将用一个例子来解释它。

假设我有一个学生对象列表,其中是学生班级,

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扩展方法收集。

1 个答案:

答案 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();