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

时间:2016-01-28 18:24:14

标签: c# linq

我有一个类型客户列表。我需要在检查具有相同客户编号的客户是否存在该特定客户端之前,在数据库中插入列表的所有值。 为此,我正在触发一个查询,以便让我所有在数据库中的客户的客户编号等于列表中的客户。我写的查询不起作用,这是代码。

CustomerRepository.Find(x => x.ClientId == clientId)
            .Where(x => x.CustomerNumber.Contains(lstCustomersInserted.Select(c => c.CustomerNumber)));

3 个答案:

答案 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。