C# 连接两个表并返回一个DbSet对象
在我的IdentityModels类中,我有一个名为Reports的属性,如下所示C# 连接两个表并返回一个DbSet对象,c#,asp.net-mvc,entity-framework,join,C#,Asp.net Mvc,Entity Framework,Join,在我的IdentityModels类中,我有一个名为Reports的属性,如下所示 public DbSet<Report> Reports { get; set; } 我也有一个以报告为模型的强烈观点 我遇到的一个问题是,我的模型有reporterId,它是名为AspNetUsers的不同表的外键,该表包含用户详细信息 我想显示用户名而不是id,因为Reports表只有userId,所以我无法显示用户名 将AspNetUsers表中的user\u name字段作为我的模型
public DbSet<Report> Reports { get; set; }
我也有一个以报告为模型的强烈观点
我遇到的一个问题是,我的模型有reporterId,它是名为AspNetUsers
的不同表的外键,该表包含用户详细信息
我想显示用户名而不是id,因为Reports表只有userId,所以我无法显示用户名
将
AspNetUsers
表中的user\u name
字段作为我的模型的一部分的好方法是什么?显然,在报告
表和aspNetUsers
表之间的某个地方必须有一个join
语句,但我不确定如何最好地做到这一点。您必须更改模型,如下所示
public class Report
{
[Required]
public string State { get; set; }
[ForeignKey("UserId")]
public virtual AspNetUser { get; set; }
public int UserId { get; set; }
[Required]
[Column("report_text")]
public string ReportText { get; set; }
}
public class AspNetUser
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Report> Reports { get; set;}
}
我的回答可能对您没有帮助,但我仍然会发布它,ViewModel专门用于这种情况,您需要在视图中显示两个或多个表数据 首先,您需要创建一个ViewModel,让我们称之为
UserReportViewModel
。在此视图模型中,您将包括一个附加属性UserName
,该属性将基于ReporterId
提取用户名
public class UserReportViewModel
{
[Required]
public string State { get; set; }
[Column("reporter_id")]
public string ReporterId { get; set; }
[Required]
[Column("report_text")]
public string ReportText { get; set; }
public string UserName{ get; set; }
}
然后,假设您使用LINQ检索报告:
Dim ReportList As List(Of UserReportViewModel) = New List(Of UserReportViewModel)
ReportList = dbContext.Reports.Select(Function(x) New UserReportViewModel With {
.State = x.State, _
.ReporterId= x.ReporterId, _
.UserName= dbContext.Users.Find(x.ReporterId).UserName, _
.ReportText = x.ReportText, _
}).ToList()
你能把一个'AspNetUsers'模型也放进去吗?你没有把
userId
放在Report
模型上吗?我有userId(属性名为ReporterId
)在我的报告
模型中,但我需要使用'AspNetUsers'表中的'userName',因为我想在用户名中显示的不是user idOh..那么为什么不能将其作为userId
呢?它给人的印象不正确?@Sampath我也需要一个用户模型。你是对的,但是我如何将报表和用户对象绑定到视图?现在我的视图绑定了@model IEnumerable
对不起,我到底在哪里使用LINQ查询?我没有理解你的意思?您是否如上图所示更改了型号?
public class UserReportViewModel
{
[Required]
public string State { get; set; }
[Column("reporter_id")]
public string ReporterId { get; set; }
[Required]
[Column("report_text")]
public string ReportText { get; set; }
public string UserName{ get; set; }
}
Dim ReportList As List(Of UserReportViewModel) = New List(Of UserReportViewModel)
ReportList = dbContext.Reports.Select(Function(x) New UserReportViewModel With {
.State = x.State, _
.ReporterId= x.ReporterId, _
.UserName= dbContext.Users.Find(x.ReporterId).UserName, _
.ReportText = x.ReportText, _
}).ToList()