.net - 比较两个列表以获取同时出现在两个列表中的对象

标签 .net vb.net linq

我有两个相同类别的列表,并且想要生成出现在两个列表中的对象的计数。

Dim repeatingMentions As Integer 
repeatingMentions =currentMentions.Where(Function(m) previousMentions.Contains(m)).Count

调试我可以看到两个列表包含具有完全相同属性值的对象,这是否足以满足包含,因为计数返回为 0。

最佳答案

您必须重写 Equals + GetHashCode 或提供自定义 IEqualityComparer(Of YourClassName) 才能使用 Contains。或者你必须使用 Any:

repeatingMentions  = currentMentions.
    Count(Function(m) previousMentions.
        Any(Function(p) m.PropertyName = p.PropertyName))

或者您可以通过 Enumerable.Join 加入两个列表:

Dim inBoth = From currMent In currentMentions
             Join prevMent In previousMentions
             On currMent.PropertyName Equals prevMent.PropertyName
repeatingMentions = inBoth.Count()

关于.net - 比较两个列表以获取同时出现在两个列表中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26234532/

相关文章:

.net - 平衡的树状数据结构,可调整为素数大小

c# - NHibernate 聚合子查询

c# - expression bodied成员如何区分void和non-void?

mysql - 如果选择 Combobox vb.net mysql,文本框中的数据库值

.net - EWS 设置 EmailMessage.Body.Text 错误

c# - 比较 2 个对象并检索具有不同值的字段列表

c# - 在 C# 中将计时器与 fileSystemWatcher 一起使用

VB.NET datagridview 与组合框的一对一映射

c# - 将存储过程 PIVOT 表转换为 LINQ 查询

c# - 如何从 LINQ 查询将匿名类型转换为强类型