C# 在LINQ中使用等效函数获取复杂对象
我有一个客户类型的列表。我需要在数据库中插入列表的所有值,然后再检查该特定客户端是否存在具有相同客户编号的客户。 为此,我启动了一个查询,以获取数据库中客户编号与列表中客户编号相等的所有客户。我正在编写的查询不起作用,下面是代码C# 在LINQ中使用等效函数获取复杂对象,c#,linq,C#,Linq,我有一个客户类型的列表。我需要在数据库中插入列表的所有值,然后再检查该特定客户端是否存在具有相同客户编号的客户。 为此,我启动了一个查询,以获取数据库中客户编号与列表中客户编号相等的所有客户。我正在编写的查询不起作用,下面是代码 CustomerRepository.Find(x => x.ClientId == clientId) .Where(x => x.CustomerNumber.Contains(lstCustomersInserted.Selec
CustomerRepository.Find(x => x.ClientId == clientId)
.Where(x => x.CustomerNumber.Contains(lstCustomersInserted.Select(c => c.CustomerNumber)));
我想你把它倒过来了。尝试反转包含的内容 编辑:我切换到使用基于注释的泛型谓词Exists而不是Contains,因此您可以匹配属性
CustomerRepository.Find(x => x.ClientId == clientId)
.Where(x => lstCustomersInserted.Exists(c => x.CustomerNumber == c.CustomerNumber));
保持简单:
var lstCustomerNumbers = lstCustomersInserted.Select(c => c.CustomerNumber);
var res = CustomerRepository.Where(x => x.ClientId == clientId && lstCustomerNumbers.Any(c => c == x.CustomerNumber));
除了之外的
怎么样
CustomerRepository.Select(x => x.ClientID)
.Except(lstCustomersInserted.Select(x => x.CustomerID));
这将返回您的lstCustomersInserted
中不存在的repo中对象的ID,告诉我们具体出了什么问题。什么类型是x.CustomerNumber
?您可能想执行lstCustomersInserted.Contains(x.CustomerNumber)
运行此代码时,您的系统动态产生一些噪音?这不是Contains
的工作方式。它应该是lstCustomersInserted.Contains(x.CustomerNumber)
。或将其更改为Any
。已修复。我只是没有在本地运行代码来验证特定的方法签名。请注意,如果lstCustomersInserted
是一个列表
,则存在一个本机包含
vs使用Linq包含
,如果它不是列表,则存在
将不起作用。最好使用Contains
来涵盖所有可能的实现。但它是一个复杂对象的列表,而不是一个简单字符串的列表。包含也不起作用。CustomerNumber是列表中对象的一个属性,也是iQueryTable中对象的一个属性,至少我从最初的问题中了解到了这一点。