如何在LINQ查询中设置多个表的条件?

时间:2011-01-06 20:55:28

标签: linq entity-framework entity-framework-4

在下面的查询中,我想要返回满足多个条件的人。某些条件适用于包含要返回的人员的表中的字段。另一个条件应用于通过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)

我该怎么做?

2 个答案:

答案 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