C# 将两个表合并到一个表中以按名称更改Id
我正在为企业创建缺勤管理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的名称,而不是IDC# 将两个表合并到一个表中以按名称更改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
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”的导航属性。