Как установить условия из нескольких таблиц в моем запросе LINQ? - PullRequest
1 голос
/ 06 января 2011

В приведенном ниже запросе я хочу вернуть людей, которые удовлетворяют нескольким условиям. Некоторые условия применяются к полям в таблице, содержащей людей, которых нужно вернуть. Другое условие применяется к другой таблице (EmailAddresses), связанной с основной таблицей (People) через PersonId.

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 ]

2 голосов
/ 07 января 2011

Понимаете ли вы это правильно, хотя бы один из них должен иметь этот адрес?Если да, используйте метод 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 возвращает true, если хотя бы один из элементов IQueryable<T> соответствует предикату.

0 голосов
/ 07 января 2011

Я думаю, вы могли бы сделать это с помощью соединения, что-то вроде этого ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...