如何使用odata $ expand显示多对多关系中的数据?

时间:2016-04-19 21:31:58

标签: c# odata asp.net-web-api2

我有一些数据库表,其中一些数据库表具有多对多关系。我正在使用webapi和odata从数据库中获取数据。例如:

TableA ---> TableB (one to one)
TableA ---> TableC (one to one)
TableA ---> TableD (one to one)
TableE --> TableD ---> Table F (many-to-many)

现在,由于我正在使用odata控制器,我可以使用/odata/Claims?$expand=TableA,TableB,TableC,TableD来显示预期的数据。但是,我无法使用TableE中的ID显示来自TableFTableD的数据。我不确定要向您展示哪些代码,但这是GET方法

   [EnableQuery(AllowedQueryOptions =  System.Web.OData.Query.AllowedQueryOptions.All)]
    public IQueryable<TableA> Get()
    {
        return dbContext.DeniedClaims.AsQueryable();               
    }

有没有什么方法可以使用odata在同一查询中显示TableE和TableF中的数据?

这是我执行$expand

时数据的显示方式
{
  "@odata.context":"http://localhost:58891/odata/$metadata#TableA","value":[
    {
      // some values,
      "Id": 1, // blah blah
      "TableB":{
          "Id":1,"FirstName":"Test","LastName":"Test",
      },"TableC":{
        "Id":1,
      },"TableD":{
        "Id":1,"TableERefId":1,"TableFRefId":1
      }
    }
}

注意TableD,我希望看到TableERefIdTableFRefId中的值,而不是只显示TableETableF

我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的数据模型,您希望深度超过1级的内联扩展。假设TableD实体类型具有名为TableETableF的导航属性,请将nested $expand option附加到TableD,如下所示:

$expand=TableB,TableC,TableD($expand=TableE,TableF)