在下面的查询中,我想要返回满足多个条件的人。某些条件适用于包含要返回的人员的表中的字段。另一个条件应用于通过PersonId链接到主表(People)的不同表(EmailAddresses)。
var t = People.Where(x =>
x.Type == 102 &&
x.FirstName == "Bob" &&
x.LastName == "Williams" &&
x.EmailAddresses.Where (ea=> ea.EmailAddress
== "bob.williams@acme.org")
)
.Select(x => x.PersonId)
我该怎么做?
答案 0 :(得分:2)
理解这一点,至少其中一个应该有这个地址吗?如果是,请使用Any
方法:
var t = People.Where(x =>
x.Type == 102 &&
x.FirstName == "Bob" &&
x.LastName == "Williams" &&
x.EmailAddresses.Any(ea=> ea.EmailAddress
== "bob.williams@acme.org")
)
.Select(x => x.PersonId)
如果Any
中至少有一个元素符合谓词,则 IQueryable<T>
返回true。
答案 1 :(得分:0)
我认为你可以通过加入来做到这一点......
var t = from p in People
join e in EmailAddress on p.PersonId equals e.PersonId into pe
from a in pe.DefaultIfEmpty
where p.Type == 102 &&
p.FirstName == "Bob" &&
p.LastName == "Williams" &&
a.EmailAddress == "bob.williams@acme.org"
select p.PersonId