C# c比较2列表
我有两个相同对象的列表。现在,第一个列表充满了数据库表中的数据。另一个列表是从服务器下载的数据 例如:C# c比较2列表,c#,C#,我有两个相同对象的列表。现在,第一个列表充满了数据库表中的数据。另一个列表是从服务器下载的数据 例如: public class HistoricData { public int Id{get;set;} public DateTime Date {get;set;} public string Name {get;set;} public float Impressions {get;set;} } 因此,在我的对象中,我有唯一的Id属性。现在我需要检查第二个列表中是否有不在第一个
public class HistoricData {
public int Id{get;set;}
public DateTime Date {get;set;}
public string Name {get;set;}
public float Impressions {get;set;}
}
因此,在我的对象中,我有唯一的Id属性。现在我需要检查第二个列表中是否有不在第一个列表中的对象。
我以为我可以在林克做到,但我有点被卡住了
var difference = from objHD in objHistoricData
join objHDN in objHistoricDataNew on objHD.Id equals objHDN.Id
select new {objHDNA = objHDN};
这总是返回0。您需要重写Equals和GetHashcode,以便通过它们的值而不是它们的引用来比较您的类型。您需要重写Equals和GetHashcode,以便通过它们的值而不是它们的引用来比较您的类型。请尝试
var difference = list1.Except(list2);
但是我想。试试看
var difference = list1.Except(list2);
但是我想
其中HistoricDataComparer是一个IEqualityComparer
其中HistoricDataComparer是IEqualityComparer使用LINQ中的Except函数,并传递用于比较ID的IEqualityComparer
var difference = a.Except( b, new YouEqualitityComparer() )
使用LINQ中的Except函数,ans传递用于比较ID的IEqualityComparer
var difference = a.Except( b, new YouEqualitityComparer() )
我假设您希望选择objHistoricDataNew中与存储在objHistoricData中不同的所有项目 那么可能是这样的:
var difference = objhistoricDataNew.Where(objHDN => objHistoricData.Select(objHD => objHD.Id).IndexOf(objHDN.Id) == -1)
我假设您希望选择objHistoricDataNew中与存储在objHistoricData中不同的所有项目 那么可能是这样的:
var difference = objhistoricDataNew.Where(objHDN => objHistoricData.Select(objHD => objHD.Id).IndexOf(objHDN.Id) == -1)