尚未担任任何角色的用户列表(具有 SimpleMembership 和 entity framework 5 的 MVC4)
List of users that not yet in any role, (MVC4 with SimpleMembership and entity framework 5)
我在 entity framework 中使用 mvc 4。我需要尚未分配任何角色的所有用户的列表。我在角色中找不到任何预定义函数。
输出将是。
我目前的代码如下。
var users = db.UserProfileEFMs
.ToList()
.Where(o => !Roles.GetRolesForUser(o.UserName).ToList<string>().Any())
.ToList();
但它工作不正常或速度太慢。
有没有其他方法可以获得这种列表。
我正在为像这样的角色寻找扩展方法。
public static class Extentions
{
public static List<string>/*UserName*/ UsersNotInAnyRole(this Roles /*System.Web.Security*/ roles)
{
/*----code----*/
}
}
目前我正在使用以下代码
var users = db.Database.SqlQuery<UserProfile>("select * from dbo.UserProfile where UserId not in(select UserId from dbo.webpages_UsersInRoles)").ToList();
你不需要那么多调用ToList()
——下面的代码等同于你所拥有的。
var users = db.UserProfileEFMs
.Where(o => !Roles.GetRolesForUser(o.UserName).Any())
.ToList();
不需要第一个 ToList()
,因为无论如何您都将评估 db.UserProfileEFMs
中的所有项目。
第二个 ToList<string>()
强制计算 GetRolesForUser
的所有值,即使您只关心是否有任何值,这很浪费。
您是否尝试过将其拆分为 foreach
循环并对其进行分析,例如
var users = new List<T>;
foreach ( var userProfileEFM in db.UserProfileEFMs)
{
if ( !Roles.GetRolesForUser(userProfileEFM.UserName).Any() )
users.Add(userProfileEFM)
}
其中 T
是 db.UserProfileEFMs
中项目的类型。
我没有找到更好的解决方案。我认为以下是最好的。
var users = db.Database.SqlQuery<UserProfile>("select * from dbo.UserProfile where UserId not in(select UserId from dbo.webpages_UsersInRoles)").ToList();
我在 entity framework 中使用 mvc 4。我需要尚未分配任何角色的所有用户的列表。我在角色中找不到任何预定义函数。
输出将是。
我目前的代码如下。
var users = db.UserProfileEFMs
.ToList()
.Where(o => !Roles.GetRolesForUser(o.UserName).ToList<string>().Any())
.ToList();
但它工作不正常或速度太慢。 有没有其他方法可以获得这种列表。
我正在为像这样的角色寻找扩展方法。
public static class Extentions
{
public static List<string>/*UserName*/ UsersNotInAnyRole(this Roles /*System.Web.Security*/ roles)
{
/*----code----*/
}
}
目前我正在使用以下代码
var users = db.Database.SqlQuery<UserProfile>("select * from dbo.UserProfile where UserId not in(select UserId from dbo.webpages_UsersInRoles)").ToList();
你不需要那么多调用ToList()
——下面的代码等同于你所拥有的。
var users = db.UserProfileEFMs
.Where(o => !Roles.GetRolesForUser(o.UserName).Any())
.ToList();
不需要第一个 ToList()
,因为无论如何您都将评估 db.UserProfileEFMs
中的所有项目。
第二个 ToList<string>()
强制计算 GetRolesForUser
的所有值,即使您只关心是否有任何值,这很浪费。
您是否尝试过将其拆分为 foreach
循环并对其进行分析,例如
var users = new List<T>;
foreach ( var userProfileEFM in db.UserProfileEFMs)
{
if ( !Roles.GetRolesForUser(userProfileEFM.UserName).Any() )
users.Add(userProfileEFM)
}
其中 T
是 db.UserProfileEFMs
中项目的类型。
我没有找到更好的解决方案。我认为以下是最好的。
var users = db.Database.SqlQuery<UserProfile>("select * from dbo.UserProfile where UserId not in(select UserId from dbo.webpages_UsersInRoles)").ToList();