C# 通过lambda从另一个集合中排除集合
这是我喜欢的类型:C# 通过lambda从另一个集合中排除集合,c#,list,lambda,C#,List,Lambda,这是我喜欢的类型: public class myType { public int Id { get; set; } public string name { get; set; } } 这种类型的集合有2个: List<myType> FristList= //fill ; List<myType> Excludelist= //fill; 您对上述查询的确切lambda表达式有何建议?三个选项。一个没有任何变化: var excludeI
public class myType
{
public int Id { get; set; }
public string name { get; set; }
}
这种类型的集合有2个:
List<myType> FristList= //fill ;
List<myType> Excludelist= //fill;
您对上述查询的确切lambda表达式有何建议?三个选项。一个没有任何变化:
var excludeIds = new HashSet<int>(excludeList.Select(x => x.Id));
var targetList = firstList.Where(x => !excludeIds.Contains(x.Id)).ToList();
或者编写一个通过ID进行比较的IEqualityComparer
,并使用:
var targetList = firstList.Except(excludeList, comparer).ToList();
在我看来,第二个和第三个选项肯定更好,特别是当你需要在不同的地方做这类工作时。我同意后一个选项的可能副本更干净,但第一个选项在
excludeList
有大量项目的情况下不会表现更好吗?@richardtallent:no,因为Except
无论如何都会在内部构建哈希集。
var targetList = firstList.Except(excludeList).ToList();
var targetList = firstList.Except(excludeList, comparer).ToList();