LINQ к объектам, сравнивающим списки объектов - PullRequest
0 голосов
/ 18 августа 2011

У меня есть объект-член, который имеет отношение один ко многим с объектом телефонов.я хочу получить список участников с одинаковыми именами и номерами телефонов, которые также совпадают.

Я могу сопоставить записи, но номера телефонов не включены из-за объединения.Любые идеи, как я мог бы получить список телефонных номеров, возвращенных?

Код на данный момент:

            var membersA = dc.Members.Include("Phones");
            var membersB = dc.Members.Include("Phones");

            var matchingMembers = from ma in membersA
                                  join mb in membersB
                                  on new { ma.Forename, ma.Surname } equals new { mb.Forename, mb.Surname }
                                  where ma.MemberID < mb.MemberID
                                  select new { ma, mb };

            if (SearchByPhone)
                matchingMembers = from mm in matchingMembers
                                  where mm.ma.Phones.Any(phoneA => mm.mb.Phones.Any(phoneB => phoneB.PhoneNumber == phoneA.PhoneNumber))
                                  select mm;

1 Ответ

0 голосов
/ 18 августа 2011

ты не можешь сделать что-то вроде:

var membersA = dc.Members.Include("Phones");
var membersB = dc.Members.Include("Phones");

var matchingMembers = from ma in membersA
                      join mb in membersB
                      on new { ma.Forename, ma.Surname } equals new { mb.Forename, mb.Surname }
                      where ma.MemberID < mb.MemberID and ma.Phones.Any(pa => mb.Any.Phones(pb => pb.PhoneNumber == pa.PhoneNumber)
                      select new { Member = ma, Phones = ma.Phones };

Обновление: Кажется, что есть некоторые ограничения с linq-to-entity и include. Приведенный выше код обновляется, поэтому он должен работать и выбирать анонимный объект. Я не пробовал и не знаю, как будет выглядеть SQL, но это может быть одним из решений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...