2009-09-28 6 views
1

동일한 개체 목록이 두 개 있습니다. 이제 첫 번째 목록은 데이터베이스 테이블의 데이터로 채워집니다. 다른 목록은 서버에서 다운로드 한 데이터로 채워집니다.C# 2 목록 비교 <object>

예 :

public class HistoricData { 
public int Id{get;set;} 
public DateTime Date {get;set;} 
public string Name {get;set;} 
public float Impressions {get;set;} 
} 

그래서 내 개체에서 나는 고유 한 아이디 속성이 있습니다. 이제 첫 번째 목록에없는 두 번째 목록의 개체가 있는지 확인해야합니다. 나는 Linq에서 그걸 할 수있을 것이라고 생각했지만, 나는 조금 붙어있다.

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

이 항상 유형이 자신의 참조가 아니라 다음 그 값을 기준으로 비교됩니다 있도록 0

답변

3

LINQ의 기능을 제외하고 사용 ANS ID를 비교하려면 IEqualityComparer 합격 (HistoricDataComparerIEqualityComparer<HistoricData> 임).

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

당신은 EqualsGetHashcode를 오버라이드 (override) 할 필요가 반환합니다.

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

0

objHistoricDataNew에서 objHistoricData에 저장된 것보다 다른 모든 항목을 선택한다고 가정합니다.

그런 다음 같은 아마 뭔가 :

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