我有两个列表,一个包含主数据,另一个包含错误数据。所以现在我想比较这个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”
我希望你理解我的问题!
感谢您的帮助...
答案 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());