c#比较2 list <object> </object>

时间:2009-09-28 14:59:33

标签: 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属性。现在我需要检查我的第二个列表中是否有对象不在我的第一个列表中。 我以为我可以在Linq做到,但我有点卡住了。

var difference = from objHD in objHistoricData
                 join objHDN in objHistoricDataNew on objHD.Id equals objHDN.Id
                 select new {objHDNA = objHDN};

这总是返回0.

5 个答案:

答案 0 :(得分:4)

var difference = objHistoricDataNew.Except(objHistoricDataNew, new HistoricDataComparer());

(其中HistoricDataComparerIEqualityComparer<HistoricData>

答案 1 :(得分:3)

使用LINQ的Except函数,并传递比较ID的IEqualityComparer。

var difference = a.Except( b, new YouEqualitityComparer() )

答案 2 :(得分:2)

您需要覆盖EqualsGetHashcode,以便您的类型按其值进行比较,而不是通过参考进行比较。

答案 3 :(得分:2)

尝试

var difference = list1.Except(list2);

但我认为you'll need your own GetHashCode and Equals methods

答案 4 :(得分:0)

我假设您要选择objHistoricDataNew中与objHistoricData中存储的不同的所有项目?

然后可能是这样的:

var difference = objhistoricDataNew.Where(objHDN => objHistoricData.Select(objHD => objHD.Id).IndexOf(objHDN.Id) == -1)