比较两个自定义LIST对象

尼克·卡恩

我有要检查的情况

1)如果任何道具(EmployeeObject),从empDb出现在empXml,返回true其他返回false

public class EmployeeObject
{
    public Int32 Id { get; set; }
    public string Title { get; set; }
    public string Desc { get; set; }
    .....
}

IList<EmployeeObject> empDb  = PopulateFromDb(); //calling ado.net
IList<EmployeeObject> empXml = PopulateFromXml(); //deserializing xml

因此,让我弄清楚这一点,我试图确定listempXml是否为list的子集empDb

到目前为止尝试过;但是即使我已经检查了两个列表中的数据,它也会返回false,并且应该返回true,除非我在表达式中做错了什么。

//at least one MATCH
empDb.Any(a => empXml.Contains(a));

或者

//at least one EXACT match
empDb.Any(x => empXml.Contains(y => x.Equals(y)));
谢尔盖·别列佐夫斯基(Sergey Berezovskiy)

如果你没有EqualsGetHashCode中实现EmployeeObject类,那么员工将参照进行比较。而且您在这里肯定会有不同的实例,因为当您从数据库中读取数据时会创建第一个列表,而在反序列化xml时会创建第二个列表。因此,即使在所有字段中具有相同值的员工也将被认为是不同的。

如果您只想按员工ID检查匹配项,则可以将序列投影到ID,然后使用“相交”检查是否存在匹配项

// at least one employee with equal Id
empDb.Select(e => e.Id).Intersect(empXml.Select(e => e.Id)).Any()

如果要按员工的字段值而不是参考值来比较员工,则有几种选择。如果您不能或不想更改EmployeeObject类的实现并覆盖其Equals和GetHashCode方法,则可以为员工创建自定义比较器

public class EmployeeComparer : IEqualityComparer<EmployeeObject>
{
    public bool Equals(EmployeeObject x, EmployeeObject y)
    {
        return x.Id == y.Id
            && x.Title == y.Title
            && x.Desc == y.Desc;
    }

    public int GetHashCode(EmployeeObject obj)
    {
        int code = 19;
        code = code * 23 + obj.Id.GetHashCode();
        code = code * 23 + obj.Title.GetHashCode();
        code = code * 23 + obj.Desc.GetHashCode();
        return code;
    }
}

然后,您可以使用此比较器:

empDb.Intersect(empXml, new EmployeeComparer()).Any()

或者,您可以将员工投影到匿名对象(具有Equals和GetHashCode的默认实现):

empDb.Select(e => new { e.Id, e.Title, e.Desc })
     .Intersect(empXml.Select(e => new { e.Id, e.Title, e.Desc })).Any()

覆盖以下方法:

public class EmployeeObject
{
    public Int32 Id { get; set; }
    public string Title { get; set; }
    public string Desc { get; set; }

    public override int GetHashCode()
    {
        int code = 19;
        code = code * 23 + Id.GetHashCode();
        code = code * 23 + Title.GetHashCode();
        code = code * 23 + Desc.GetHashCode();
        return code;
    }

    public override bool Equals(object obj)
    {
        EmployeeObject other = obj as EmployeeObject;
        if (other == null)
            return false;

        if (ReferenceEquals(this, other))
            return true;

        return Id == other.Id && 
               Title == other.Title && Desc == other.Desc;                 
    }
}

并且您的代码将起作用。或者您可以使用相交:

empDb.Intersect(empXml).Any()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我将如何比较自定义树集实现中的两个对象?

来自分类Dev

通过指定的方法C#比较两个自定义对象列表

来自分类Dev

我将如何比较自定义树集实现中的两个对象?

来自分类Dev

比较两个自定义列表python

来自分类Dev

使用自定义规则比较两个哈希

来自分类Dev

比较两个NSArray的自定义对象并列出这些数组的不同对象的更好方法

来自分类Dev

合并两个自定义对象类型的ArrayList

来自分类Dev

合并两个自定义对象类型的ArrayList

来自分类Dev

如何在Powershell v2.0中比较两个自定义日期

来自分类Dev

jQuery验证插件-比较两个选择下拉菜单的自定义方法

来自分类Dev

使用自定义比较器功能压缩两个列表的标准方法

来自分类Dev

WooCommerce预订-比较两个时间戳与自定义日期格式的PHP

来自分类Dev

使用自定义比较器功能压缩两个列表的标准方法

来自分类Dev

自定义类:无法比较数组中的两个元素

来自分类Dev

如何比较自定义验证器中的两个控件?

来自分类Dev

Django,在自定义json中插入两个序列化的对象模型

来自分类Dev

如何基于两个自定义对象删除列表中的重复项

来自分类Dev

在两个条件下迭代自定义对象的向量

来自分类Dev

从两个自定义对象列表中删除公共元素

来自分类Dev

比较两个列表中的用户定义对象

来自分类Dev

在模型中创建自定义函数以比较两个外键最大时间戳

来自分类Dev

两个视图之间的自定义循环过渡

来自分类Dev

基于内容的两个自定义tableviewcell的高度

来自分类Dev

如何从两个nsarrays创建自定义的nsdictionary

来自分类Dev

Android,如何合并两个自定义ArrayList?

来自分类Dev

python两个列表映射自定义

来自分类Dev

两个视图之间的自定义循环过渡

来自分类Dev

SQLite:自定义联接两个表?

来自分类Dev

基于内容的两个自定义tableviewcell的高度

Related 相关文章

  1. 1

    我将如何比较自定义树集实现中的两个对象?

  2. 2

    通过指定的方法C#比较两个自定义对象列表

  3. 3

    我将如何比较自定义树集实现中的两个对象?

  4. 4

    比较两个自定义列表python

  5. 5

    使用自定义规则比较两个哈希

  6. 6

    比较两个NSArray的自定义对象并列出这些数组的不同对象的更好方法

  7. 7

    合并两个自定义对象类型的ArrayList

  8. 8

    合并两个自定义对象类型的ArrayList

  9. 9

    如何在Powershell v2.0中比较两个自定义日期

  10. 10

    jQuery验证插件-比较两个选择下拉菜单的自定义方法

  11. 11

    使用自定义比较器功能压缩两个列表的标准方法

  12. 12

    WooCommerce预订-比较两个时间戳与自定义日期格式的PHP

  13. 13

    使用自定义比较器功能压缩两个列表的标准方法

  14. 14

    自定义类:无法比较数组中的两个元素

  15. 15

    如何比较自定义验证器中的两个控件?

  16. 16

    Django,在自定义json中插入两个序列化的对象模型

  17. 17

    如何基于两个自定义对象删除列表中的重复项

  18. 18

    在两个条件下迭代自定义对象的向量

  19. 19

    从两个自定义对象列表中删除公共元素

  20. 20

    比较两个列表中的用户定义对象

  21. 21

    在模型中创建自定义函数以比较两个外键最大时间戳

  22. 22

    两个视图之间的自定义循环过渡

  23. 23

    基于内容的两个自定义tableviewcell的高度

  24. 24

    如何从两个nsarrays创建自定义的nsdictionary

  25. 25

    Android,如何合并两个自定义ArrayList?

  26. 26

    python两个列表映射自定义

  27. 27

    两个视图之间的自定义循环过渡

  28. 28

    SQLite:自定义联接两个表?

  29. 29

    基于内容的两个自定义tableviewcell的高度

热门标签

归档