在 LINQ 中使用 IN 等效项获取复杂对象
本文关键字:获取 复杂 对象 IN LINQ | 更新日期: 2023-09-27 18:32:16
我有一个客户类型的列表。我需要在数据库中插入列表的所有值,然后再检查该特定客户端是否存在具有相同客户编号的客户。为此,我正在触发一个查询,以获取数据库中客户编号等于列表中客户编号的所有客户。我正在编写的查询不起作用,这是代码。
CustomerRepository.Find(x => x.ClientId == clientId)
.Where(x => x.CustomerNumber.Contains(lstCustomersInserted.Select(c => c.CustomerNumber)));
保持简单:
var lstCustomerNumbers = lstCustomersInserted.Select(c => c.CustomerNumber);
var res = CustomerRepository.Where(x => x.ClientId == clientId && lstCustomerNumbers.Any(c => c == x.CustomerNumber));
我认为你把它倒过来了。尝试反转包含。
编辑:我根据注释切换到使用通用谓词存在而不是包含,因此您可以匹配属性。
CustomerRepository.Find(x => x.ClientId == clientId)
.Where(x => lstCustomersInserted.Exists(c => x.CustomerNumber == c.CustomerNumber));
Except
怎么样?
CustomerRepository.Select(x => x.ClientID)
.Except(lstCustomersInserted.Select(x => x.CustomerID));
这将返回存储库中不存在的 lstCustomersInserted
对象的 ID。