2011-08-18 42 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 }; 

更新:这似乎是一些限制使用LINQ到实体,包括。上面的代码被更新,所以它应该工作,因此它选择一个匿名对象。我没有尝试过,也不知道SQL会是什么样子,但它可能是一个解决方案。

+0

感谢Tomas,这工作得很好。 – teej