C# Linq到实体通过变量列表获取实体列表
我正在帮助重构的一个系统使用仪表盘来帮助管理员工。在使用小样本进行开发期间,以下代码运行良好:C# Linq到实体通过变量列表获取实体列表,c#,linq,entity-framework,entity-framework-6,C#,Linq,Entity Framework,Entity Framework 6,我正在帮助重构的一个系统使用仪表盘来帮助管理员工。在使用小样本进行开发期间,以下代码运行良好: public List<User> GetAllUsersByRoles(String role) { var userList = new List<User>(); string[] userNamesFromDB = Roles.GetUsersInRole(role); foreach(string username in userNamesF
public List<User> GetAllUsersByRoles(String role)
{
var userList = new List<User>();
string[] userNamesFromDB = Roles.GetUsersInRole(role);
foreach(string username in userNamesFromDB)
{
MembershipUser userFromDB = Membership.GetUser(username);
User user = ConvertUserFromDatabase(userFromDB);
user.Roles = Roles.GetRolesForUser(username);
userList.Add(user);
}
return userList;
}
公共列表GetAllUsersByRoleForDashboard(字符串角色)
{
var userNamesFromDB=newhashset(Roles.GetUsersInRole(role));
var users=context.aspnet\u users.Where(u=>userNamesFromDB.Contains(u.UserName))
.选择(u=>新用户
{
//进行映射
}).ToList();
返回用户;
}
顺便说一句,在这样的查询中使用HashSet可以提供更好的性能您可以这样做。。。如果我没弄错你的问题
来自ctx.aspnet\u用户中的u
其中usernames.Contains(u.UserName)
选择u代码>为什么要更改哈希集?我只是尝试了前面的代码,效果很好。呵呵,我只是在写原因:)事实上,如果你有很多项目,你会注意到性能。我所说的“很多”是指700个字符,你能解释一下使用hashset时的性能增益吗?内存中的集合只是转换为sql参数,那么为什么哈希集的性能比数组好呢?数据不会循环多次。下面是更多说明
public List<User> GetAllUsersByRoleForDashboard(String role)
{
List<User> userList = new List<User>();
string[] userNamesFromDB = Roles.GetUsersInRole(role);
var users = userNamesFromDB
.SelectMany(user => ctx.aspnet_Users
.Where(x => x.UserName == user)
.Select(user => new User
{
FirstName = ctx.Profile
.FirstOrDefault(x => x.ProfileID == ctx.User
.FirstOrDefault(u => u.UserID == user.UserId).ProfileID).FirstName,
LastName = ctx.Profile
.FirstOrDefault(x => x.ProfileID == ctx.User
.FirstOrDefault(u => u.UserID == user.UserId).ProfileID).LastName,
UserName = user,
IsApproved = ctx.aspnet_Membership
.FirstOrDefault(m => m.UserId == user.UserId).IsApproved,
})).ToList();
return users;
}
public List<User> GetAllUsersByRoleForDashboard(String role)
{
var userNamesFromDB = new HashSet<string>(Roles.GetUsersInRole(role));
var users = context.aspnet_Users.Where(u => userNamesFromDB.Contains(u.UserName))
.Select(u=> new User
{
// Do your mapping
}).ToList();
return users;
}