小売業者、店舗、グループ、ユーザーの 4 つのエンティティがあります。
各小売業者は、多数のストアと多数のユーザーを持つことができます。ユーザーは 1 つのグループにのみ属することができ、グループ内には多数のストアが存在します。1 つのストアが多数のグループに所属することもできます。このため、storesingroups という結合テーブルがあります。ストアとユーザーは、RetailerId を外部キーとして持っています。各ストアのユーザーの詳細やログなど、EF モデルにリンクされている他のテーブルがあります。
私がしたいのは、特定のユーザー名にリンクされているすべてのグループを返しますが、グループの詳細とそのグループ内の店舗、必要のない店舗エンティティにリンクされている他のテーブルのみを返すことです。
私はいくつかの異なるクエリをいじって、これを以下の最も近いものにしようとしましたが、より良い方法があると確信しています. コードはメモリ不足の例外も引き起こしていたので、どこかが正しくないことがわかります
var results1 = (from g in db.Groups
from gs in db.StoresInGroups
from s in db.Stores
// from r in db.Retailers
from u in db.UserProfileEFs
where s.RetailerRetailerId == u.RetailerId
where g.GroupId == gs.GroupId
where gs.StoreId == s.StoreId
where u.UserName == this.User.Identity.Name
where g.GroupId == u.GroupId
select new { Groups = g}).ToList();
編集:
わかりましたので、このクエリを介して必要な結果を得ることができました:
var results2 = (from g in db.Groups
join u in db.UserProfileEFs on g equals u.Group where u.UserName == this.User.Identity.Name
select new { Group = g });
現在、ユーザープロファイルとグループ内のストアを返しているため、プロジェクションを変更する必要があります。ユーザープロファイルを返さないようにクエリを取得するにはどうすればよいですか?