将两个表合并到一个表中以按名称更改ID

时间:2019-04-29 15:03:48

标签: c# angularjs asp.net-mvc entity-framework linq

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

我有3个关于请求的表格。

要在表上列出请求的主体表是“请求”,我还有可以待处理,已批准或已拒绝的RequestState表,以及可以用于病假,假期等的RequestType表...

表格请求:

  • RequestId
  • 主题
  • 说明
  • 开始日期
  • EndDate
  • TypeId
  • StateId
  • UserId

表格请求状态

  • StateId(ForeignKey TableRequest)
  • 名称(待定,已批准等)

表RequestType

  • TypeId(ForeignKey TableRequest)
  • 姓名(病假,假期...)

我正在使用asp.net mvc和angularJs。使用EntityFramework,我可以查询要使用angularJS列出的内容。

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

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

这是获取所有PendingRequests的代码,它将返回带有表Requests上的键的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");
        });
    }

Html Table with requests list [带有表的EntityFramework模型] [2]

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

更新

这是我查询过的图片!

我从不同的表中进行选择,匹配ID并创建了一个对象!

query

1 个答案:

答案 0 :(得分:0)

这不是html或angularjs的问题。

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

首先,您需要建立正确的实体映射:

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

public virtual ICollection<RequestState> RequestStates { get; set; }
public virtual ICollection<RequestType> RequestTypes { get; set; }

然后在RequestState和RequestType类中添加Request类的虚拟属性,如下所示:

public virtual ICollection<Request> Categories { get; set; }

现在,您应该可以执行以下查询:

var allRequests = db.Request.Where(r => r.TypeId == reqTypeId)
                  .SelectMany(r => r.Request);

在结果中,对于allRequests中的每个对象,您将获得r.RequestStates.Namer.RequestTypes.Name之类的属性