我有一个LINQ查询,我不明白为什么它不会返回任何结果,即使条件为真。LINQ查询不返回结果
我将TBL_CONTACTAddress contactAddress, pPeople person
传递给我的方法。
我的LINQ查询看起来像:
pPeople_Address recordExists = people
.Select(p => p.pPeople_Address
.Where(a => a.People_ID == person.ID
&& a.Address1 == contactAddress.LINE1)
.FirstOrDefault())
.FirstOrDefault();
如果我将鼠标悬停在过去FirstOrDefault()
它说,它返回pPeople_Address
。当我调试它时,person.ID
和contactAddress.LINE1
都提供了正确的输入。该记录存在于IEnumerable<pPeople> people
。
我错过了这里的东西?
编辑1:第一部分获取实体。
using (CRMEntities crm = new CRMEntities())
{
people = crm.pPeoples.Where(p => p.import_num == ImportNumber).Select(p => p).AsEnumerable().ToList();
}
第二部分是更新的信息,看是否记录存在
private void GetAddressGeneric(TBL_CONTACT contact, pPeople person, CRMEntities crm)
{
foreach (TBL_ADDRESS contactAddress in contact.TBL_ADDRESS.Where(n => n.LINE1 != null))
{
var address = new pPeople_Address();
pPeople_Address recordExists = people.Select(p => p.pPeople_Address.FirstOrDefault(a => a.People_ID == person.ID && a.Address1 == contactAddress.LINE1)).FirstOrDefault();
}
EDIT2:下面的代码来完成我想要的,但我希望能够做到在一个单一的LINQ语句
var recordExists = people.FirstOrDefault(p => p.pPeople_Address.Any(a =>
a.People_ID == person.ID &&
a.Address1 == contactAddress.LINE1));
pPeople_Address record = recordExists.pPeople_Address.FirstOrDefault();
提供一个完整的可编译示例来演示您的问题,在这种情况下,创建一个包含足够数据的示例数据结构,以便返回结果但不包含结果。 – Servy
您确定“people”变量包含您筛选的信息是否存在基于过滤字段person.ID和contactAddress.LINE1? –
你想选择什么? pPeople_Address或人物对象? – alexmac