2011-08-18 4 views
0

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

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

код до сих пор:

  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; 
+0

Сообщает нам, что происходит не так, и мне легче помочь, я все равно попробовал, но это сложно, так как вы не говорите, где проблема. –

+0

Объекты Phone не возвращаются в результате из-за соединения. Я хочу, чтобы объекты телефона были возвращены с объектом-членом, поэтому я также могу отображать номера телефонов, но включение («Телефоны») отменяется соединением, т. е. member.Phones == null вместо списка телефонных номеров – teej

+0

Обновлено ответ, может быть, это работает. Не забудьте принять, если это произойдет. –

ответ

0

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

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 }; 

Update: Это, как представляется, некоторые ограничения с LINQ-к-юридических лиц и включают в себя. Вышеописанный код обновляется, поэтому он должен работать, поэтому он выбирает анонимный объект. Я не пробовал и не знаю, как будет выглядеть SQL, но это может быть одно решение.

+0

Спасибо Томасу, это сработало отлично. – teej

Смежные вопросы