2017-03-15 3 views
0

したがって、私はそれぞれの役割IDにユーザーを割り当てるLNK_USER_ROLEという表があります。Foreachでは、リストからLINQに複数の列を挿入します

この場合、「ADMIN」ロールと「USER」ロールの両方をユーザーに割り当てようとします。したがって、私は自分のロールテーブルからロールのIDを照会して、ユーザーIDとともに私のLNK_USER_ROLEテーブルに追加することができます。

var db = new MySqlContext(); 

List<int> RoleId = db.ROLES.Where(u => u.ROLE_NAME == "ADMIN" && u.ROLE_NAME == "USER").Select(u => u.ROLE_ID).ToList(); 


     foreach(int id in RoleId) 
     { 
      LNK_USER_ROLE Roles = new LNK_USER_ROLE(); 
      { 
       Roles.ROLE_ID = id; 
       Roles.USER_ID = db.USERS.Where(u => u.EMAIL == model.Users.EMAIL && u.NAME == model.Users.NAME).Select(u => u.USER_ID).Single(); 
      }; 

     db.LNK_USER_ROLE.Add(Roles); 
     } 
db.SaveChanges(); 

LNK_USER_ROLEROLE_IDROLEデシベルでIDへの外部キーです)残念ながら、何も起こりません!あなたが見ることができるように、私はおそらく、このコードが成功した場合、私のテーブルに2行追加する必要があります..しかし、私はどのようにForeachを使用して行を挿入する必要がありますかわからない、私はカントに一致する以前の質問を見つけるようです必要。

+0

コードをステップバイステップでデバッグしようとしましたか? – Pikoh

+2

どこのステートメントを少し変更して||ロールIDを選択するときは、&&(And)の代わりに(Or)を使用します。つまり、.Where(u => u.ROLE_NAME == "ADMIN" || u.ROLE_NAME == "USER") ' – Valeklosse

+0

しかし、両方のロール名が必要です。または、そのうちの1つだけを選択しますか? –

答えて

0

問題は、And(&&)およびOr(||)演算子にあります。

クエリは、ROLE_NAMEが「ADMIN」と「USER」に等しいレコードを同時に選択しようとしています。

List<int> RoleId = db.ROLES.Where(u => u.ROLE_NAME == "ADMIN" && u.ROLE_NAME == "USER").Select(u => u.ROLE_ID).ToList();

から

List<int> RoleId = db.ROLES.Where(u => u.ROLE_NAME == "ADMIN" || u.ROLE_NAME == "USER").Select(u => u.ROLE_ID).ToList();

にクエリを変更すると、ロール名が 'ADMIN' または 'USER'

実施例と同じであるレコードを選択することになります: https://dotnetfiddle.net/xju2Wo

関連する問題