2016-03-02 48 views
0

我正在使用mvc 4与实体框架。我需要一个尚未分配任何角色的所有用户的列表。我在角色中找不到任何预定义的函数。尚未处于任何角色的用户列表,mvc c#

我现在的代码如下。

var users = db.UserProfileEFMs 
    .ToList() 
    .Where(o => !Roles.GetRolesForUser(o.UserName).ToList<string>().Any()) 
    .ToList(); 

但它无法正常工作或速度太慢。 有没有其他方法可以获得这种列表。

我正在寻找一个类似于角色的Extentions方法。

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(); 

回答

0

我没有得到更好的解决方案。我认为以下是最好的。

var users = db.Database.SqlQuery<UserProfile>("select * from dbo.UserProfile where UserId not in(select UserId from dbo.webpages_UsersInRoles)").ToList(); 
0

你不需要调用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类型。

+0

我得到了一个错误。 LINQ to Entities不识别方法'System.String [] GetRolesForUser(System.String)'方法,并且此方法不能转换为存储表达式。 – vicky

+0

在哪条线上? –

+0

...我没有使用LINQ to Entities,所以'foreach'方法可能没有帮助。 –