Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体通过变量列表获取实体列表_C#_Linq_Entity Framework_Entity Framework 6 - Fatal编程技术网

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;
}