Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 连接两个表并返回一个DbSet对象_C#_Asp.net Mvc_Entity Framework_Join - Fatal编程技术网

C# 连接两个表并返回一个DbSet对象

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字段作为我的模型

在我的IdentityModels类中,我有一个名为Reports的属性,如下所示

    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()