我有两个相同对象的列表。现在,第一个列表中填充了数据库表中的数据。另一个列表中填充了下载服务器的数据。
示例:
public class HistoricData {
public int Id{get;set;}
public DateTime Date {get;set;}
public string Name {get;set;}
public float Impressions {get;set;}
}
因此,在我的对象中,我拥有唯一的Id属性。现在我需要检查我的第二个列表中是否有对象不在我的第一个列表中。 我以为我可以在Linq做到,但我有点卡住了。
var difference = from objHD in objHistoricData
join objHDN in objHistoricDataNew on objHD.Id equals objHDN.Id
select new {objHDNA = objHDN};
这总是返回0.
答案 0 :(得分:4)
var difference = objHistoricDataNew.Except(objHistoricDataNew, new HistoricDataComparer());
(其中HistoricDataComparer
是IEqualityComparer<HistoricData>
)
答案 1 :(得分:3)
使用LINQ的Except函数,并传递比较ID的IEqualityComparer。
var difference = a.Except( b, new YouEqualitityComparer() )
答案 2 :(得分:2)
您需要覆盖Equals
和GetHashcode
,以便您的类型按其值进行比较,而不是通过参考进行比较。
答案 3 :(得分:2)
答案 4 :(得分:0)
我假设您要选择objHistoricDataNew中与objHistoricData中存储的不同的所有项目?
然后可能是这样的:
var difference = objhistoricDataNew.Where(objHDN => objHistoricData.Select(objHD => objHD.Id).IndexOf(objHDN.Id) == -1)