2

キー値のペアを保持する3番目のテーブルに基づいて、2つのテーブル間に多対多の関連付けを設定しました。次に、他のデータを必要とせずに、右側のテーブルのキー値を左側でグループ化するクエリを実行したいと思います。

LeftTable { LeftID, LeftField1, LeftField2 } 
JoinTable { LeftID, RightID} 
RightTable { RightID, RightField1, RightField2 }

基本的に、JoinTableにクエリを実行し、SQLがどちらの側からもフィールドをフェッチしようとせずに、「LeftIDs」によってグループ化されたすべての「RightIDs」を取得する方法はありますか?JoinTableは、モデル内でそれ自体がエンティティではありませんが、関連付けにマップされます。

ObjectQueryとEntityCommand(ESQL)の両方を使用して少し実験しましたが、どちらも、必要のないRightTableに参加することで、他のフィールドに読み込まれるようです。

私のESQLは次のようになります。

SELECT lt.LeftID, (SELECT rt.RightID
FROM NAVIGATE(lt, MyModel.LeftToRightAssoc, RightTable) as rt)
FROM MyEntities.LeftTable as lt;

ただし、生成されたSQLはまだRightField1とRightField2でフェッチしています。

確かにこれを行うためのより簡単な方法があるはずですか?

4

1 に答える 1

1

Leftクラスにナビゲーション プロパティRights(エンティティのコレクション) があると仮定すると、Rightこれを試すことができます。

var list = context.Lefts.Select(l => new
{
    LeftId = l.LeftId,
    RightIds = l.Rights.Select(r => r.RightId)
});

foreach (var item in list)
{
    Console.WriteLine("LeftId = {0}", item.LeftId);
    foreach (var rightId in item.RightIds)
    {
        Console.WriteLine("RightId = {0}", rightId);
    }
}

LeftId各要素がと対応する のコレクションを持つ匿名型オブジェクトのコレクションを取得しますRightIds。このクエリは、 などの他のフィールドに触れてはなりませんRightField1。匿名型の代わりに、独自のカスタム型を作成し、上記のクエリでこの型に射影することもできます。

于 2011-05-23T15:51:40.800 に答える