如何按 OData 中的嵌套属性进行过滤?

nou*_*ime 8 c# json odata asp.net-web-api

我将 OData 与 Web API 一起使用以返回以下 JSON:

[
{
    "EmployeeID": 1,
    "FirstName": "Nancy",
    "LastName": "Davolio",
    "Title": "Sales Representative",
    "HireDate": "\/Date(704649600000)\/",
    "Territories": [
        {
            "TerritoryID": "06897",
            "TerritoryDescription": "Wilton"
        },
        {
            "TerritoryID": "19713",
            "TerritoryDescription": "Neward"
        }
    ]
}
]
Run Code Online (Sandbox Code Playgroud)

例如,如何过滤 JSON 以显示属于威尔顿领土的项目?我试过这个,但似乎不起作用:

http://localhost:62559/Home/Read?$filter=Territories/TerritoryDescription eq Wilton
Run Code Online (Sandbox Code Playgroud)

这是我使用存储库模式从数据库返回对象的代码:

[Queryable]
public IQueryable<EmployeeViewModel> Employees
{
  get
  {
    return context.Employees.Select(e => new EmployeeViewModel
    {
        EmployeeID = e.EmployeeID,
        FirstName = e.FirstName,
        LastName = e.LastName,
        HireDate = e.HireDate,
        Title = e.Title,
        Territories = e.Territories.Select(t => new TerritoryViewModel
        {
            TerritoryID = t.TerritoryID,
            TerritoryDescription = t.TerritoryDescription
        })
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

这是返回 JSON 对象的控制器:

public ActionResult Read()
{
    return Json(repository.Employees, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

nou*_*ime 5

我在阅读与我相关的问题时遇到了以下答案:
使用 OData Wep Api 在数据传输对象上嵌套过滤器

有趣的是,我在之前的搜索中从未遇到过这个问题。不然我也不会问这个问题。无论如何,这个方法对我有用:

http://localhost:62559/Home/Read?$filter=Territories/any(c:%20c/TerritoryDescription eq 'Wilton')
Run Code Online (Sandbox Code Playgroud)