これはちょっと混乱した質問ですが、私の頭の中では論理を正しく取得できません。多対多の関係では、あるエンティティが別のエンティティに限定されていることを確認してください。
私は3つのテーブルTableA
,TableB
およびを持っています。私はTableB
のレコードがTableA
の単一のレコードにのみ結び付けられているTableABBridge
からすべての値を取得する必要があります。
私は、ユーザーがTableA
の値の特定のプロパティを編集できるツールを持っています。しかし、TableB
も同じプロパティを持ち、TableA
のエンティティのプロパティと同期させておく必要があります。したがって、TableA
の値を更新すると、特定のエンティティにリンクされたTableB
の値はすべて更新する必要がありますが、TableB
のエンティティがTableA
の1つのエンティティにのみリンクされている場合のみ更新する必要があります。
ですから、例えば上記の例では
TableAの
| ID | Prop |
|-------------------|
| 1| 1|
| 2| 3|
| 3| 3|
|-------------------|
TableBの
| ID | Prop |
|-------------------|
| 1| 1|
| 2| 1|
| 3| 3|
| 4| 1|
|-------------------|
TableABBridge
| AId | BId |
|-------------------|
| 1| 1|
| 1| 2|
| 1| 4|
| 2| 3|
| 3| 3|
|-------------------|
のために、私はにプロパティを編集することができるだろうID
の場合のの値がID
の場合のみ、1,2および4はTableA
からID
1に限定されています。ただし、TableB
の共通エンティティを共有しているため、ID
2または3のプロパティを編集することはできません。
Linqを使用して、のIDのリストを取得する方法を理解する必要があります。これは、TableABBridge
を照会して編集できるようにしています。
これを達成するためのSQLは次のとおりです。
SELECT MAX(AId), BId
FROM TableABBridge
GROUP BY BId
HAVING Count(AId) = 1
と
SELECT a.Id
FROM TableABBridge a
JOIN
(SELECT BId
FROM TableABBridge
GROUP BY BId
HAVING Count(AId) > 1) b ON b.BId = a.BId
Linqの同等の機能は、Join Statementです。参照:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng
明示的または暗黙的な「リンク」(ブリッジ)テーブルを使用していますか?なぜあなたはエンティティモデルの関連部分を投稿しないのですか? –
実際には3つのエンティティの間に明示的なリンクがあります。したがって、 'TableA'からの値は' TableABBridge'へと 'TableB'へ、そしてその逆の値は' TableABBridge'へ、そして 'TableB'から。 –