0

Entity Frameworkを使用して、このクエリを実行しようとしています:

SELECT uir.roleid
FROM UsersInRoles uir
WHERE uir.userid = @userid

UsersInRoles には以下が含まれます:roleidおよびuseridのみ。

問題は、UsersInRoles多対多の関係テーブルです。PK に基づいてテーブルRolesとテーブルを接続します。UsersEntity Framework は、UsersInRoles エンティティを削除することにより、これを非常に奇妙に扱います。クエリの作成方法を理解するのに苦労しています。

これは私が持っているものですが、2行しか返さないはずなのに27行を返しています.

 var user_roles = admin_db.Roles
                    .Where(u => u.User.userid == db_userid)
                    .Select(r => r.roleid).ToList();

実を言うと、27 を返す方法を正直に理解することさえできません。その結果の数は意味がありません。

4

1 に答える 1

2

を使用して、指定されたユーザー ID を持つユーザー (少なくとも 1 人)を持つすべてAnyのロールを見つけることができます。

var user_roles = admin_db.Roles
    .Where(r => r.Users.Any(u => u.userid == db_userid))
    .Select(r => r.roleid)
    .ToList();

Rolesまたは - にコレクションがある場合User:

var user_roles = admin_db.Users
    .Where(u => u.userid == db_userid)
    .SelectMany(u => u.Roles.Select(r => r.roleid))
    .ToList();
于 2013-09-25T21:23:09.760 に答える