WebApi 2.0 OData,获取查询中使用的SQL表的列表

时间:2016-08-04 09:16:25

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

我使用EF5和代码优先方法有一个相当标准的WebApi 2.0 OData 4.0 Web服务。这项服务有效,我可以通过外键查询实体和相关实体。

该服务是只读的,控制器只有一个Get和Get-by-key实现。

public class MyTableController : MyDbController
{
    [EnableQuery]
    public IQueryable<MyTable> Get()
    {
        return db.MyTable;
    }

    [EnableQuery]
    public SingleResult<MyTable> Get([FromODataUri] int key)
    {
        IQueryable<MyTable> result = db.MyTable.Where(p => p.pk == key);
        return SingleResult.Create(result);
    }
}

在两个Get()实现中,我希望能够访问OData中使用的表列表以及生成的SQL查询。 MyTable显然是其中之一,但我如何获得其他(其中包括(嵌套)$ expand中使用的那些)?我可以尝试自己解析URL,但这似乎不是一个非常好的方法。

1 个答案:

答案 0 :(得分:1)

  1. 创建一个继承自EnableQueryAttribute
  2. 的类CustomizeAttribute
  3. 覆盖此方法:var select = $("select"); select.change(function(e) { select.not(this).each(function() { this.selectedIndex = e.target.selectedIndex }) })
  4. 然后你在这个方法中得到queryOptions,你可以去SelectExpandQueryOption找到ExpandItem,然后你得到所有的表。

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select>
      <option>america</option>
      <option>rusia</option>
      <option>china</option>
    </select>
    <select>   <!--here the second select tag which has so many option value-->
      <option>list1</option>
      <option>list2</option>
      <option>list3</option>
    </select>
  5. 在Controller方法

    上使用此属性
    public virtual IQueryable ApplyQuery