gpt4 book ai didi

vb.net - Linq - 从不同列表类型中排除项目

转载 作者:行者123 更新时间:2023-12-03 18:21:27 24 4
gpt4 key购买 nike

有没有办法选择列表中不包含在另一个列表中的项目?例如:

list1 = From t In list1 Where Not list2.Contains(t.column1)

这给了我错误:
Value of type 'Integer' cannot be converted to '<anonymous type>'

这是有道理的,因为 list2.Contains 期望与 list2 具有相同的类型。但是,列表类型不同。我只想根据列比较进行选择。

最佳答案

那么是什么list2实际上包含?如果您能准确地表达您的查询,我们可能可以在 LINQ 中表达它。不知道是什么list1 , list2column1很难帮忙吗。

我想说的是List<T>.Contains对于您检查的每个项目,将是 O(n)。如 list2可能不小,您可能想创建一个 HashSet<T> - 然后每个 Contains通话会快很多。

但话又说回来,当我们对情况了解得更多时,我们很可能会提出一个完全不同的解决方案。请尽可能使问题具体以获得最佳答案。

编辑:如果 tvanfosson 的解决方案适合您,并且您使用的是 LINQ to Objects,那么您就有潜在的性能坑。在 list2 上进行投影会更好(IMO)一次并构建一个集合:

Dim invalid = New HashSet(Of Integer)(list2.Select(Function(x) x.Id))
list1 = From t in list1 Where Not invalid.Contains(t.column1)

关于vb.net - Linq - 从不同列表类型中排除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com