重复在数据库上记录两个呼叫

问题描述 投票:0回答:1

如何避免重复调用数据库。第一次,我想获取重复的记录,但是在第二次调用中,我想跳过记录,但又不想再次调用_context。我的代码示例:

var duplicateCustomers = customerObject.Customers.
     Where(a => _context.Customers.Any(b => a.CustomerId == b.CustomerIdRef && customerObject.ClientId == b.ClientId));

var skipDuplicateCustomers = customerObject.Customers.
     Where(a => !_context.Customers.Any(b => a.CustomerId == b.CustomerIdRef && customerObject.ClientId == b.ClientId));

这些数据是通过customerObject来自json的。我需​​要检查db中是否存在客户,是否需要将它们保存到记录器中,并且这些与cusotmerOBject不重复的对象需要添加到客户表中。

c#
1个回答
0
投票

嗯,如果既然我们想将有重复的和没有重复的all个客户带到两个单独的存储桶中,我们可以首先从db中获取所有客户:

var customers = _context.Customers.ToList();

然后定义您的自定义比较器:

public class CustomerEqualityComparer : IEqualityComparer<Customer>
{   
    public bool Equals(T a, T b)
    {           
        return a.CustomerId == b.CustomerIdRef && customerObject.ClientId == b.ClientId;                  
    }

    public int GetHashCode(Customer obj)
    {                           
        return obj.CustomerId.GetHashCode();
    }               
}

然后将您的新集合与LINQ.Except方法一起使用(这将不会执行数据库调用):

var duplicateCustomers = customerObject.Customers.Where(a => customers.Any(b => a.CustomerId == b.CustomerIdRef && customerObject.ClientId == b.ClientId)).ToList();

var skipDuplicateCustomers = customers.Except(duplicateCustomers, new CustomerEqualityComparer()).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.