在 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)));

在 LINQ 中使用 IN 等效项获取复杂对象

保持简单:

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。