• C# Linq 取得两个列表的交集


     我们经常会用到linq 来查询 一个数组中和另一个数组中相同的项, 这个时候就会用到IEqualityComparer接口。

    public class StudyInfoModel
    {
         public string InstanceUID = "";
    }

    public class StudyCompare : IEqualityComparer<StudyInfoModel>
                    {
            // StudyInfoModel are equal if their UID equal.
            public bool Equals(StudyInfoModel x, StudyInfoModel y)
            {
                //Check whether the compared objects reference the same data.
                if (Object.ReferenceEquals(x, y)) return true;

                //Check whether any of the compared objects is null.
                if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                    return false;

                //Check whether the Study' properties are equal.
                return x.InstanceUID == y.InstanceUID;
            }

            // If Equals() returns true for a pair of objects
            // then GetHashCode() must return the same value for these objects.
            public int GetHashCode(StudyInfoModel study)
            {
                //Check whether the object is null
                if (Object.ReferenceEquals(study, null)) return 0;

                //Get hash code for the Name field if it is not null.
                int hashStudyName = study.InstanceUID == null ? 0 : study.InstanceUID.GetHashCode();

                return hashStudyName;
            }


                    }


    以上实现了关于StudyInfoModel的IEqualityCompare接口, 其中条件为InstanceUID相同。

    具体使用:

    List<StudyInfoModel> StudyData = new List<StudyInfoModel>();
    List<StudyInfoModel> StudyList = new List<StudyInfoModel>();

    .......

    //取得StudyData数组中InstanceUID在StudyLIst存在的所有项
    var needModifyStudy = StudyData.Intersect(StudyList, new StudyCompare()).ToList();

    比如StudyData中是InstanceUID分别为1,2,3,4,5,6的数据, StudyList中是InstanceUID分别为2,4,6,8,10的数据, 
    则查询结果为StudyData中2,4,6的项。


    https://muzizongheng.blog.csdn.net/
  • 相关阅读:
    世纪末的星期
    马虎的算式
    蜜蜂飞舞
    Torry 的困惑
    级数调和
    数列
    最大最小公倍数
    蚂蚁感冒
    12.integer to Roman
    13.Roman to Integer
  • 原文地址:https://www.cnblogs.com/muzizongheng/p/3167260.html
Copyright © 2020-2023  润新知