gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 应用程序用户 linq 加入其他表

转载 作者:行者123 更新时间:2023-12-01 11:20:53 25 4
gpt4 key购买 nike

我使用默认的 ASP.NET MVC 5 用户身份在我的数据库中存储和管理用户。

我还有其他数据库表将引用用户表。

我面临的问题是如何在查询具有外键(userid)的某个表时提取用户详细信息。

根据我在网上看到的,我不能直接查询用户表(“不是最佳实践”)。

所以我必须使用 ApplicationDbContext 来获取用户列表:

var userContext = new ApplicationDbContext();
var db_users = userContext.Users.Select(x => new UserSearchResult()
{
ApplicationUserId = x.Id,
Email = x.Email,
Username = x.UserName,
Fullname = x.FullName
});

然后我的 linq 查询将是例如:

var query = (from dep in Dbcontext.Departments
from usr in db_users.Where(x => x.ApplicationUserId == dep.HodUserId).DefaultIfEmpty()
join cat in Dbcontext.Categories on dep.CategoryId equals cat.CategoryId
select new DepartmentSearchResult()
{
DepartmentId = dep.DepartmentId,
DepartmentName = dep.DepartmentName,
HodName = usr.Fullname,
CategoryName = cat.CategoryName
});

但是,上面的方法将不起作用,因为 SQL 不知道 db_users

有办法解决这个问题吗?

最佳答案

您可以在使用 UserId 作为外键的模型中添加 User 的导航属性。查询该特定项目时包括用户详细信息。

在你的部门模型中说

public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public ApplicationUser User { get; set; } //Navigation Property
public string UserId { get; set; } //Foreign Key
}

当您在任何操作中查询部门信息时

var _context = new ApplicationDbContext();
var department = _context.Departments.Include(c => c.User).FirstOrDefault();

在这里,我使用 FirstOrDefault() 从 db 中获取单个(准确地说是第一个)项目。您可以根据需要使用任何合适的方法。

现在在部门中,您可以通过简单地通过 department.User.FullName 或您需要的用户的任何属性来访问用户信息

关于asp.net-mvc - ASP.NET MVC 应用程序用户 linq 加入其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43608040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com