【问题标题】:Join two tables in one table to change the Id's by names在一个表中加入两个表以按名称更改 Id
【发布时间】:2019-09-18 05:43:15
【问题描述】:

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

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

列出请求表上的请求的主要表是 Requests,我还有 RequestState 表可以是 Pending、Approved 或 Declined 和 RequestType 表可以是病假、假期等...

表请求:

  • 请求 ID
  • 主题
  • 说明
  • 开始日期
  • 结束日期
  • 类型标识
  • 状态标识
  • 用户ID

表请求状态

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

表请求类型

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

我正在使用 asp.net mvc 和 angularJs。使用 EntityFramework 我正在查询以使用 angularJS 列出。

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

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

这是获取所有 PendingRequests 的代码,它将返回一个 json,其中包含表 Requests 上的键。但我想更改或使用查询中的某些内容来获取其他表的名称(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 };
    }

关于我有 http 请求的 ng 重复和 JavaScript 的代码

<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 表上显示名称而不是 Id,我认为我需要一个带有连接的 EntityFramework 查询。谢谢!

更新

这是我查询的图片!

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

query

【问题讨论】:

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


    【解决方案1】:

    这不是 html 或 angularjs 的问题。

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

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

    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 之类的属性

    【讨论】:

    • 您好,感谢您的回答!我试过了,但我遇到了问题。当我尝试在 SelectMany(r => r.Request) 末尾进行查询时,“请求没有出现”,在我的情况下是请求。我可用的选项不会出现请求,我做了你所说的一切:)
    • @HélderBarreto 而不是 .SelectMany(r =&gt; r.Request); 您也可以对查询执行 ToList()。如果没有找到数据,它要么返回一个空列表,要么返回一个包含数据的列表。
    • 我不知道我是否做错了什么,但我的数据最终返回 RequestStates 和 RequestType 为空,我怎样才能访问该名称?在实体映射上我做了你提到的
    • 可能是查询。您可以更改查询并尝试以下操作:var requests = db.Requests.Include(z =&gt; z.RequestStates).ToList(); 并查看列表中是否也有 RequestStates 的数据?然后你可以找出为什么 RequestStates 或 RequestTypes 为空。
    • 我在查询中使用了我创建的集合中的 RequestState。我在我的请求表的实体映射中有这个 --> 你说要创建的 2 个公共 ICollection 以及 2 个公共虚拟 RequestStates 和 RequestsTypes。我在查询中使用了包含,我遇到了一个错误,比如指定的包含路径无效。 EntityType 'CiberbitHolidaysModel.Requests' 未声明名为 'RequestState' 的导航属性。
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多