我是linq
和C#的新手,试图通过某个属性查询复杂的对象。场景是我有一个currentPerson
对象的列表,其中包括PersonAddressesDisplay
属性,它是一个字符串。我遍历了尝试按其地址(person
)在数据库中查找已保存的PersonAddressesDisplay
对象的列表。现在由于某种奇怪的原因,我也得到了不想要的结果(不同的字符串也出现在matchAddresses
列表中)。查询如下:
foreach(var currentPerson in PersonsListToSave) {
.
.
.
var matchAddresses = db.PersonAddresses.Include(p => p.Persons).AsEnumerable().
Where(add => currentPerson.Addresses
.Any(personAddress => personAddress.PersonAddressesDisplay == add.PersonAddressesDisplay)).ToList();
// matchAddresses includes unwanted results
.
.
.
}
答案 0 :(得分:1)
如果您要提取与PersonAddress
至少共享地址的Person
+ currentPerson
对象,则可以为此目的直接构造查询:
foreach(var currentPerson in PersonsListToSave)
{
// ...
IEnumerable<string> currentAddresses =
currentPerson.Addresses.Select(personAddr => personAddr.PersonAddressesDisplay);
var matchAddresses = db.PersonAddresses.Include(p => p.Persons)
.Where(addr => currentAddresses.Contains(addr.PersonAddressesDisplay))
.ToList();
// ...
}
我无法尝试此代码,但是我认为通过在后台构造WHERE - IN
SQL过滤器,它应该可以正常工作。如果无法解决问题,请尝试并发送更多信息。