【问题标题】:How to find the difference between 2 list models如何找到 2 个列表模型之间的差异
【发布时间】:2020-11-24 16:50:52
【问题描述】:

面临比较两个模型列表的问题。

public class Relations
    {
        [key]
        public int Id { get; set; }
        public int CounterpartyId { get; set; }
        public int CounterpartyTypeId { get; set; }
        public int DebTypeId { get; set; }
    }

我有方法从前端获取此模型的列表并从数据库中获取列表。当来自前端的模型没有 id 时,我没有将 id 添加到这个模型中。 例如:

            var models = new List<Relations>()
            {
                new Relations
                {
                    CounterpartyId = 1,
                    CounterpartyTypeId = 1,
                    DebTypeId = 1
                },
                new Relations
                {
                    CounterpartyId = 1,
                    CounterpartyTypeId = 2,
                    DebTypeId = 1001
                }
            };

            var entity = new List<Relations>()
            {
                new Relations
                {
                    CounterpartyId = 1,
                    CounterpartyTypeId = 1,
                    DebTypeId = 1
                },
                
            };

如何比较这两个模型列表???我需要插入具有(CounterpartyId = 1,CounterpartyTypeId = 2,DebTypeId = 1001)的模型

为了避免db中的重复,我尝试了

IEnumerable<Relations> toInsert = models.Except<Relations>(entity);

试试

var test=(from m in models select m).Except(entity).ToList();

但它们是相同的,无法找到不在数据库中的数据

【问题讨论】:

  • 您可以添加自定义比较器;见here。您可以使用它来确定类中的哪些字段构成匹配项。

标签: c# list linq


【解决方案1】:

正如彼得史密斯在评论部分建议的那样,您可以创建您的Comparer

sealed class MyComparer : IEqualityComparer<Relations>
{
    public bool Equals(Relations x, Relations y)
    {
        if (x == null)
            return y == null;
        else if (y == null)
            return false;
        else
            return x.CounterpartyId == y.CounterpartyId  && x.CounterpartyTypeId == y.CounterpartyTypeId && x.DebTypeId == y.DebTypeId ;
    }

    public int GetHashCode(Relations obj)
    {
        return obj.Id.GetHashCode();
    }
}

并使用Except()重载如下:

IEnumerable<Relations> toInsert = models.Except<Relations>(entity, new MyComparer());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 2018-06-27
    • 2020-06-27
    • 2013-01-02
    • 2019-11-23
    • 1970-01-01
    • 2021-08-19
    • 2018-09-14
    相关资源
    最近更新 更多