0

下の画像では、テーブルの外観を示しています。最後の数時間、必要なクエリの最適なソリューションを取得しようとしていますが、どういうわけかEFのサークルで実行しています

ここに画像の説明を入力

モジュールを含むロールのコレクションが必要です。モジュールが割り当てられていないロールがあるため、左結合にする必要があります。コレクションは " {role, modules}" のように見える必要があります Role は単一のオブジェクトである必要があり、モジュールは "Module" オブジェクトのコレクションである必要があります。

こんな感じにしてみました

var x = (from r in _context.Role
                     from rm in r.RoleModule.DefaultIfEmpty()
                     join m in _context.Module on rm.ModuleID equals m.ID
                     select new { role= r, modules=rm }).ToList();

編集

lazyberezovskyの提案に従って、部分クラスを作成しました

public partial class Role
{
    public virtual IEnumerable<Module> Modules { get { return RoleModule.Select(p => p.Module); } }
}

正常に動作します。私のもう1つの問題は、....「セット」アクセサーを作成するにはどうすればよいですか。

編集済み

今これを手に入れて、それは動作します。しかし、どうすればモジュールのコレクションにアクセスできますか?

var x = (from r in _context.Role
                     join rm in _context.RoleModule on r.ID equals rm.RoleID into ps
                     from rm in ps.DefaultIfEmpty()
                     select new { role=r, modules=rm.Module }).GroupBy(p => p.role).ToList();

*これをwpfで使用してデータコンテキストとして設定しています*

4

2 に答える 2

3

Role最も簡単な解決策は、エンティティ内のモジュールのナビゲーション プロパティを定義することです。

public class Role
{
   // ...
   public virtual ICollection<Module> Modules { get; set; }
}

次に、モジュールを使用してロールを熱心にロードできるようになります。

var roles = _context.Role.Include(r => r.Modules).ToList();

ICollection<RoleModule>ジャンクション テーブルが複雑な場合は、 と の両方を保持するタイプRoleのナビゲーション プロパティを作成しますModule。クエリは次のようになります。

var query = from r in context.Roles
            select new {
                 Role = r,
                 Modules = r.RoleModules.Select(rm => rm.Module)
            };
于 2013-06-07T14:05:23.793 に答える