C# 将两个表合并到一个表中以按名称更改Id

C# 将两个表合并到一个表中以按名称更改Id,c#,angularjs,asp.net-mvc,entity-framework,linq,C#,Angularjs,Asp.net Mvc,Entity Framework,Linq,我正在为企业创建缺勤管理web应用程序。我需要列出员工选择时间段时的请求 我有三张关于请求的表格 主表列出了表中的请求,即请求,我还有RequestState表,可以是待定、批准或拒绝,RequestType表可以是病假、假期等 表格要求: 请求ID 主题 描述 起始日期 结束日期 类型ID 州 用户ID 请求状态表 StateId ForeignKey表请求 名称待定,已批准。。等 表请求类型 TypeId ForeignKey表请求 姓名病假、假期。。。 我正在使用asp.NETMVC和an

我正在为企业创建缺勤管理web应用程序。我需要列出员工选择时间段时的请求

我有三张关于请求的表格

主表列出了表中的请求,即请求,我还有RequestState表,可以是待定、批准或拒绝,RequestType表可以是病假、假期等

表格要求:

请求ID 主题 描述 起始日期 结束日期 类型ID 州 用户ID 请求状态表

StateId ForeignKey表请求 名称待定,已批准。。等 表请求类型

TypeId ForeignKey表请求 姓名病假、假期。。。 我正在使用asp.NETMVC和angularJs。通过EntityFramework,我可以用angularJS查询列表

所以我想在一个html表中列出请求表列表,我将在一个带有TypeId和StateId的图像中显示该列表。但是我想显示TypeID和StateId的名称,而不是数字

在我的EntityFramework查询中,我需要做什么?加入

这是获取所有PendingRequests的代码,它将返回一个json,其中包含表请求上的键。但是我想更改或使用查询中的某些内容来获取其他表RequestState和RequestType的名称,而不是ID

 public JsonResult GetAllPendingRequests()
    {
        var data = "";
        using (CiberbitHolidayMgmt bd = new CiberbitHolidayMgmt())
        {           
            bd.Configuration.LazyLoadingEnabled = false;

            var pendingRequests = bd.Requests.Where(a => a.StateId == 1);

            data = JsonConvert.SerializeObject(pendingRequests, Formatting.None,
                    new JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    });
        }
        return new JsonResult { Data = data, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }
关于ng repeat和JavaScript的代码,其中包含http请求

<tbody>
      <tr ng-repeat =" a in getPendingRequests">
          <td>{{a.TypeId}}</td>
          <td>{{a.StartDate}} - {{a.EndDate}}</td>
          <td>{{a.Requested}} days</td>
          <td>{{a.StateId}}</td>
          <td><a href="@Url.Action("Details", "Request")"><i class="fas fa-info-circle "></i></a></td>
      </tr>
  </tbody>


 function getAllPendingRequests() {
        $http({
            method: 'GET',
            url: '/Request/GetAllPendingRequests',
        })
        .then(function (data) {
            data.data = JSON.parse(data.data);
            $scope.getAllPendingRequests = data.data;

            console.log($scope.getAllPendingRequests);

        }, function (data) {
            alert("error");
        });
    }
[实体框架模型及表格][2]

基本上,我想在html表上显示关于状态和类型请求的名称,而不是ID,我想我需要一个带有连接的EntityFramework查询。谢谢

更新

这是我做的带有查询的图像

我从不同的表中选择,匹配id并创建一个对象


这不是html或angularjs的问题

您需要使用EntityFramework进行查询,并返回RequestState和RequestType的正确数据名,而不是ID

 public JsonResult GetAllPendingRequests()
    {
        var data = "";
        using (CiberbitHolidayMgmt bd = new CiberbitHolidayMgmt())
        {           
            bd.Configuration.LazyLoadingEnabled = false;

            var pendingRequests = bd.Requests.Where(a => a.StateId == 1);

            data = JsonConvert.SerializeObject(pendingRequests, Formatting.None,
                    new JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    });
        }
        return new JsonResult { Data = data, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }
首先,您需要建立适当的实体映射:

在请求表的实体映射中,添加RequestState和RequestType的虚拟属性,如下所示:

public virtual ICollection<RequestState> RequestStates { get; set; }
public virtual ICollection<RequestType> RequestTypes { get; set; }
public virtual ICollection<Request> Categories { get; set; }
var allRequests = db.Request.Where(r => r.TypeId == reqTypeId)
                  .SelectMany(r => r.Request);
现在,您应该能够执行如下查询:

public virtual ICollection<RequestState> RequestStates { get; set; }
public virtual ICollection<RequestType> RequestTypes { get; set; }
public virtual ICollection<Request> Categories { get; set; }
var allRequests = db.Request.Where(r => r.TypeId == reqTypeId)
                  .SelectMany(r => r.Request);

在结果中,对于allRequests中的每个对象,您将获得诸如r.requestState.Name和r.RequestTypes.Name等属性。您好,谢谢您的回答!我试过了,但有个问题。当我试图在末尾进行查询时,SelectManyr=>r.Request请求不会出现,在我的例子中是Requests。我可用的选项不会出现在请求中,我已经完成了您所说的一切:@HélderBarreto而不是.SelectManyr=>r.Request;您也可以在查询中列出。如果找不到数据,它将返回一个空列表,或者返回一个包含数据的列表。我不知道我是否做错了什么,但我的数据的最终返回RequestState和RequestType为空,我如何才能访问该名称?在实体映射中,我所做的可能是查询。您是否可以更改查询并尝试以下操作:var requests=db.requests.Includez=>z.RequestStates.ToList;看看列表中是否也有RequestStates的数据?然后您可以找出RequestState或RequestTypes为null的原因。我在查询中使用了我创建的集合中的RequestState。我在我的请求表的entity mapping->2 publics ICollection(您说要创建)上有这个,还有2个public virtual RequestState和RequestStype。我在查询中使用了include,但出现了一个错误,例如指定的include路径无效。EntityType“CiberbitHolidaysModel.Requests”未声明名为“RequestState”的导航属性。