0

小売業者、店舗、グループ、ユーザーの 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 });

現在、ユーザープロファイルとグループ内のストアを返しているため、プロジェクションを変更する必要があります。ユーザープロファイルを返さないようにクエリを取得するにはどうすればよいですか?

4

0 に答える 0