2015-07-10 34 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();