如何避免重复调用数据库。第一次,我想获取重复的记录,但是在第二次调用中,我想跳过记录,但又不想再次调用_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不重复的对象需要添加到客户表中。
嗯,如果既然我们想将有重复的和没有重复的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();