2015-06-30 70 views
1

我有一個程序,它接收一個文件,執行一些數據處理,然後將結果與數據庫中的結果進行比較。比較兩個複雜對象,一個來自數據庫,另一個來自輸入

對象

public class ReleaseDates 
{ 
    public int Id { get; set; } 
    public string MovieName { get; set; } 
    public string Country { get; set; } 
    public DateTime ReleaseDate { get; set; } 
    public string AlternateSource { get; set; } 
} 

這是非常有可能的是,MovieName將是相同的是什麼數據庫,但ReleaseDate可能會改變。

如何將我從數據庫中抓取的內容與ReleaseDate對象列表進行比較?

public bool Compare(ReleaseDates original, ReleaseDates newObj) 
    { 
     if (original.AlternateSource != newDate.AlternateSource) 
     { 
      return false; 
     } 
     if (original.Country != newDate.Country) 
     { 
      return false; 
     } 
     if (original.MovieName != newDate.MovieName) 
     { 
      return false; 
     } 
     if (original.ReleaseDate != newDate.ReleaseDate) 
     { 
      return false; 
     } 
     return true; 
    } 

如何我從數據庫中獲取數據:

public List<ReleaseDates> GetAllReleaseDates() 
{ 
    return Db.ReleaseDates.ToList(); // Db is my DataContext 
} 

上面的例子來比較的ReleaseDates一個實例,但我怎麼能比較一清單?我不能訂購清單,因爲會有重複的MovieName,但不同的ReleaseDateAlternateSource

更新 對不起,我問了錯誤的問題。

我想要做的是將數據庫列表與新列表進行比較,如果它們不同,請將其從數據庫中刪除並插入新項目。

E.g.

public void Example(ReleaseDates A, ReleaseDates B) 
{ 
    if(A.MovieName != B.MovieName) // But need to compare all properties 
    { 
     Db.ReleaseDates.Remove(A); 
     Db.ReleaseDates.Add(B); 
     Db.SaveChanges(); 
    } 
} 
+0

顯示從db獲取數據的代碼 – dotctor

+0

@dotctor updated –

+0

我建議您將方法重命名爲Equals。比較通常會返回一個int值並用於排序。例如參見文檔String.Compare。 比較兩個列表取決於您的需求。項目的順序是否重要? –

回答

0
public bool Compare(List<ReleaseDates> A, List<ReleaseDates> B) 
{ 
    if (A.Count != B.Count) return false; 
    foreach (ReleaseDates aElement in A) 
    { 
     if (!B.Any (bElement => Compare(aElement, bElement ) return false; 
    } 
} 
+0

這假設排序無關緊要,但列表中的每個元素必須在另一個列表中具有相同的項目。如果這些都是按某種東西排序的,那麼它會表現得更好,並且可以比較加工索引中的項目。 – Derek

+0

我已更新我的問題。 –

0

,如果你把你的收藏作爲集這將是更好。你可以重寫ReleaseDates類的equals方法(我覺得Movie是這個類更好的名字),並將每個集合的元素添加到HashSet中。

您可以使用HashSet.SetEquals方法來檢查相等性。

+0

已更新我的問題。 –

相關問題