我有一个类型客户列表。我需要在检查具有相同客户编号的客户是否存在该特定客户端之前,在数据库中插入列表的所有值。 为此,我正在触发一个查询,以便让我所有在数据库中的客户的客户编号等于列表中的客户。我写的查询不起作用,这是代码。
CustomerRepository.Find(x => x.ClientId == clientId)
.Where(x => x.CustomerNumber.Contains(lstCustomersInserted.Select(c => c.CustomerNumber)));
答案 0 :(得分:3)
保持简单:
var lstCustomerNumbers = lstCustomersInserted.Select(c => c.CustomerNumber);
var res = CustomerRepository.Where(x => x.ClientId == clientId && lstCustomerNumbers.Any(c => c == x.CustomerNumber));
答案 1 :(得分:0)
我认为你倒退了。尝试颠倒包含。
编辑:我根据评论切换到使用通用谓词Exists而不是Contains,因此您可以匹配属性。
CustomerRepository.Find(x => x.ClientId == clientId)
.Where(x => lstCustomersInserted.Exists(c => x.CustomerNumber == c.CustomerNumber));
答案 2 :(得分:0)
Except
怎么样?
CustomerRepository.Select(x => x.ClientID)
.Except(lstCustomersInserted.Select(x => x.CustomerID));
这将返回您lstCustomersInserted
中不存在的仓库中对象的ID。