使用实体框架在 DataGridView 中显示数据库中的多行



我正在尝试在datagridview中显示数据库中的多个记录,但我一直只有一个记录。
此查询涉及 2 个表,从第一个表中我获取所有满足条件的 id,从第二个表中获取用户信息。
第一个表是tblUsers_Roles,第二个表是 tblUsers。
这些表具有主键/源键关系。
这是我的代码:

IEnumerable<tblUsers_Role> id = db.tblUsers_Role.Where(a => a.User_Role == selectRole);
foreach (var user in id)
{
    var userinfo = from b in db.tblUsers 
                   where b.User_Id == user.User_Id 
                   select new { b.First_Name, b.Last_Name, b.Status, b.Authenticated };
    dgvResults.DataSource = userinfo.ToList();
    dgvResults.Show();
}

您正在循环中分配网格。这是行不通的。也许这样的事情会起作用:

var userinfo =(from ur in db.tblUsers_Role
    join u in db.tblUsers
        on ur.User_Id equals u.User_Id 
    where ur.User_Role == selectRole
    select new
    {
        u.First_Name, 
        u.Last_Name, 
        u.Status, 
        u.Authenticated
    }).ToList();
dgvResults.DataSource = userinfo;
dgvResults.Show();

或者替代是这样的:

 var roles=db.tblUsers_Role
             .Where(a => a.User_Role == selectRole)
             .Select (a =>a.User_Id).ToList();
var userinfo=
    (
        from u in db.tblUsers
        where roles.Contains(u.User_Id)
        select new
        {
            u.First_Name, 
            u.Last_Name, 
            u.Status, 
            u.Authenticated
        }
    ).ToList();
dgvResults.DataSource = userinfo;
dgvResults.Show();

不如第一个好。但也许你理解这个概念。

最新更新