如何比较两个List并匹配它

时间:2016-10-20 21:25:43

标签: c# asp.net-mvc linq list comparison

我有两个列表,一个包含主数据,另一个包含错误数据。所以现在我想比较这个thow列表并将错误的列表与正确的列表匹配。

 public class Data
{
    public int Id { get; set; }
    public string Text{ get; set; }
}

var masterList = new List<Data> { new Data { id = 1, Text = "Hello" }, new Data() {id = 2, Text ="Ciao"} };
var wrongList = new List<Data> { new Data { id = 1, Text = "Ciao" }, new Data() {id = 2, Text ="Morning"} };

现在在masterList中,id为1的Text为“Hello”,而在wrongList中,id为1的文本为“Ciao”​​。

但是id为2的文本文本为“Hello”,所以我如何匹配这两个列表,当列表中有匹配时,我得到正确的文本到右边ID ...

如果文本匹配,那么我将有一个新列表如下:

id = 2,Text =“Ciao”​​

我希望你理解我的问题!

感谢您的帮助...

1 个答案:

答案 0 :(得分:0)

您可以使用linq和Intersect轻松执行此操作,并Data实施IEquatable<Data>

var matches = masertList.Intersect(wrongList);

更新:根据评论,这是一个实施IEqualityComparer<Data>

的解决方案
class DataComparer : IEqualityComparer<Data>
{
    // Datas are equal if their names and Id are equal.
    public bool Equals(Data x, Data y)
    {
        if (ReferenceEquals(x, y))
            return true;

        if (ReferenceEquals(x, null) ||
            ReferenceEquals(y, null))
            return false;

        return x.Id == y.Id && x.Text == y.Text;
    }

    public int GetHashCode(Data data)
    {
        if (ReferenceEquals(product, null))
            return 0;

        return (product.Name == null ? 0 : product.Name.GetHashCode()) ^ product.Code.GetHashCode();
    }
}

现在,您只需执行:var matches = masertList.Intersect(wrongList, new DataComparer());