2012-06-21 24 views
5

私は2つのテーブルServiceProviderを持っています。それらの間には、2つのフィールドのみを有する接合テーブルServiceProvider(2つのPKのそれぞれに1つ)がある。 edmxに追加すると、多対多の結合テーブルが抽象化され、見えなくなります(期待どおり)。LINQ to Entitiesで多対多を選択

これは、特定のサービスに基づいてプロバイダを取得する場合を除いて、すべて問題ありません。このquestionから:

答えは単純になるようだ:

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

が、これはすべてのプロバイダを返します。私はここで間違って何をしていますか?

+0

んように単純ではありませんか? – Rawling

+0

はいs.Providersはプロバイダの集まりですが、selectの一部として動作させることができませんでした。 – 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を使用してみてください可能性があります

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

EDIT

を修正し、実際のモデルにクエリをテストした:

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

プロバイダIDとサービスIDを同じにする必要があるのはなぜですか?なぜフィンにプロバイダのリストが必要なときに{プロバイダ、サービス}のペアを選択していますか? – Rawling

+0

彼は理解できる方法を彼に提案するだけです。彼は後で設定し、必要のないものを取り除くことができます – Boomer

+0

彼は 'Join'ステートメントを削除できましたか? – Rawling

2

はこれを試してみてくださいおよびデータ。それは今働く。

+0

コレクション型は通常、 'Id'プロパティを持たないので、多対多の関係ではうまくいきません。 – Nuffin

+0

答えを訂正しました。 –

2

は、それはあなたが使用することができます `Providers`プロパティを持っていないS``

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