2015-07-10 97 views
1

我知道LINQ不支持标准“连接”中的两个diff上下文。LINQ:两个独立上下文的结果之间的连接

话虽如此,我试图做的是,从'用户'和'联系'的上下文中一起列出一张名单,我们应该说'员工'。 (这些都是来自旧项目的edmx,我不会惹恼的。)

事情是,'用户'是我想要得到的世界卫生组织,但他们的人口统计数据驻留在“联系人”中。这里有两个电流LINQ的:

 var users = _pets_dc.Users 
      .Select(p => p) 
      .Where(x => x.Active) 
      .ToList(); 

     var contacts = _poems_dc.Contacts 
      .Select(p => p) 
      .Where(x => x.Active) 
      .ToList(); 

我需要接触其中 'user.Contact_GUID' 等于 'contacts.Contact_GUID'。

我曾尝试:

var query = contacts 
    .Where(x => x.Contact_GUID == users 
     .Select(y => y.Contact_GUID) 
     .FirstOrDefault()); 

无济于事......这只是带回一个接触,但没有.FirstOrDefault()将无法​​正常工作。有任何想法吗?

+0

用户是宠物吗?这需要“用户”到一个全新的水平... – Jashaszun

+0

我不知道,这是当我到达这里时是如何..我猜测模糊是为了安全 –

+0

我只是在开玩笑。我只是发现你的变数名称幽默。 – Jashaszun

回答

2

如果是两个表中使用Contact_GUID如果你有FK在用户表中尝试使用第一查询与include

var users = _pets_dc.Users.Include("Contacts") 
      .Where(x => x.Active) 
      .ToList(); 

,你可以想试试以下:

var joined = from list1 in users 
       join list2 in contacts 
       on list1.Contact_GUID equals list2.Contact_GUID 
       select new { list1, list2 }; 

裁判:https://stackoverflow.com/a/2724018/1166597

+0

,您可以使用:'users.list1.Contact_GUID'访问适当的项目,您可以使用任何变量名称而不是list1,列表2 – OldTrain

+0

什么是“等号”运算符?在C#中,它是'=='。 – Jashaszun

+1

@Jashaszun,https://msdn.microsoft.com/en-us/library/gg509017.aspx#JoinUsingEntityFields – OldTrain

1

您可以使用以下代码:

var result = users.Select(e => contacts.Where(x => x.Contact_GUID == e.Contact_GUID)); 
+1

这也有效 –

+0

有点工作,有点......不是你的错。我需要的是“联系人”。所以一个lil mod可能会工作,但上面的答案对我来说是正确的,谢谢 –

1

加盟的是,将在这里工作的选项之一,但你可以按照如下修改目前的解决方案:

var query = contacts 
    .Where(x => users 
       .Select(y => y.Contact_GUID).Contains(x.Contact_GUID) 
      ).FirstOrDefault()); 

Contains将在一个给定的列表检查Guid,在你与比较的Guid原液List<Guid>,这将失败

0

选项1:

var query = from person in users 
        join contact in contacts on person.Contact_GUID equals contact.GUID into employees 
        from employee in employees.DefaultIfEmpty() 
        select new Employee() { User = person, Demographic = employee.Demographic }; 

变种员工= query.ToList();

选项2:

var query = from person in users 
        join contact in contacts on person.Contact_GUID equals contact.GUID into employees 
        from employee in employees.DefaultIfEmpty() 
        select new { person.FirstName, person.LastName, employee.Demographic }; 

变种员工= query.ToList();