Linq查询也返回不需要的结果

时间:2019-04-21 15:54:47

标签: c# entity-framework linq

我是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
         .
         .
         .
        }

1 个答案:

答案 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过滤器,它应该可以正常工作。如果无法解决问题,请尝试并发送更多信息。