比较两个复杂对象,一个来自DB,另一个来自输入

时间:2015-06-30 10:55:54

标签: c# linq compare

我有一个程序接收文件,进行一些数据处理,然后将结果与数据库中的结果进行比较。

对象

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();
    }
}

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

如果将集合视为集合会更好。您可以覆盖ReleaseDates类的equals方法(我觉得Movie是这个类的更好的名称)并将每个集合的元素添加到HashSet。

您可以使用HashSet.SetEquals方法检查是否相等。