2012-06-21 122 views
5

我有兩個表ServiceProvider。在他們之間是一個加入表ServiceProvider其中只有2個字段 - 兩個PK的每一個。當添加到edmx時,加入的多對多表被抽象出來,不能被看到(如預期的那樣)。多對多選擇LINQ to Entities

除了當我想獲得基於給定服務的提供者時,這一切都很好。從這個question

它看起來像答案是簡單的:

var query = from p in entities.Providers 
      from s in entities.Services 
      where s.Id == 15 
      select p; 

但這返回所有供應商。我在這裏做錯了什麼?

+0

不's'沒有,你可以使用'Providers'財產? – Rawling

+0

是s.Providers是提供者的集合,但我無法將它作爲選擇的一部分工作。 – finoutlook

+0

@abatishchev - 感謝編輯,但不會更改標題,如果有人搜索實體框架多對多,會使問題更難找到? (我意識到它的EF由標籤定義,但是搜索將會繼續) – finoutlook

回答

4
var query = entities.Providers.FirstOrDefault(p => p.Id == 15).Services.ToList(); 
+0

我認爲你有錯誤的方式讓你的'Providers'和'Services'。 – Rawling

+0

是的,它是我試圖輸出的提供者,但我仍然看到它是對稱的 – finoutlook

+0

是的,我猜這個原理是雙向的。 – Rawling

-1

您可以嘗試使用join,就像這樣:

entity.Providers.Join(entity.Services, c => c.ID, p => p.ID,(c, p) => new { Providers= c, Services= p }) 
+0

爲什麼提供者ID等於服務ID?當Fin只需要提供商列表時,爲什麼選擇{Providers,Services}對? – Rawling

+0

只是提出他可以理解的方式。他可以稍後設置並刪除他不需要的東西 – Boomer

+0

因此他可以刪除'Join'語句? – Rawling

2

試試這個:

var res = from s in entities.Services 
      where s.Id == 15 
      select s.Provider; 

編輯

修正和測試,現實生活中的模型查詢和數據。它現在有效。

+0

這不會在多對多的關係中起作用,因爲集合類型通常沒有'Id'屬性。 – Nuffin

+0

更正了答案。 –

2

是不是那麼簡單

var matchingProviders = entities.Services.Single(s=>s.Id==15).Providers; 
+0

這工作。我仍然困惑爲什麼我提到的其他問題得到了upvotes - 這篇文章有相同的'雙從'建議:http://smehrozalam.wordpress.com/2010/06/29/entity-framework-queries-involving-多對多關係表/ – finoutlook

+0

@Downvoter:照顧評論? – Rawling

+0

@finoutlook我對實體框架並不是很熟悉,但是如果這能夠工作 - 並且它看起來並不是太牽強 - 那麼它就可以工作:) – Rawling