从列表

时间:2015-08-27 11:33:46

标签: linq asp.net-mvc-3 c#-4.0

我有类ABC这样的

public class ABC{
public int Id {get;set;}
public int UserCount {get;set;}
}

现在我将以下记录添加到ABC

类型的列表中
List<ABC> lstABC = new List<ABC>();
lstABC.Add(new ABC(){Id=1,UserCount=5});
lstABC.Add(new ABC(){Id=2,UserCount=15});
lstABC.Add(new ABC(){Id=3,UserCount=3});
lstABC.Add(new ABC(){Id=4,UserCount=20});
lstABC.Add(new ABC(){Id=5,UserCount=33});
lstABC.Add(new ABC(){Id=6,UserCount=21});

我还有另一个int

类型的列表
List<int> lstIds = new List<int>();
lstIds.Add(1);
lstIds.Add(3);
lstIds.Add(4);

现在,我要删除lstABClstIds的{​​{1}}中未匹配的所有项目,而不使用任何循环。最优化的方法是什么?

3 个答案:

答案 0 :(得分:2)

你可以像这样使用RemoveAll:

lstABC.RemoveAll(x => !lstIds.Contains(x.Id));

它应该可以轻松工作

答案 1 :(得分:0)

继续使用@ Coder1409解决方案,使用HashSet提升性能(适用于大型集合):

HashSet<int> hashSet = new HashSet<int>(lstIds);
lstABC.RemoveAll(x => !hashSet.Contains(x.Id));

HTH

答案 2 :(得分:0)

另一种解决方案有点简单

  lstABC = (from l in lstABC
                 where lstIds.Contains(l.Id)
                 select l).ToList();

除了删除你,你也可以只选择匹配的元素