C# 仅对$expand-LINQ to实体中不支持成员

C# 仅对$expand-LINQ to实体中不支持成员,c#,entity-framework,asp.net-web-api,odata,C#,Entity Framework,Asp.net Web Api,Odata,我对$expand子句有问题: 这是有效的->api/Components('XYZ')/Childs 这不会->api/组件('XYZ')?$expand=Childs 我使用EntityFramework(6.1.3)在数据库中映射视图(只读),然后基于EF实体创建OData v3控制器。它适用于大多数表,但当实体之间的关系不是基于导航属性而是基于LINQ查询时,就会出现问题。 下面是代码示例: public class ComponentsController : ODataControl

我对
$expand
子句有问题:
这是有效的->
api/Components('XYZ')/Childs

这不会->
api/组件('XYZ')?$expand=Childs

我使用EntityFramework(6.1.3)在数据库中映射视图(只读),然后基于EF实体创建OData v3控制器。它适用于大多数表,但当实体之间的关系不是基于导航属性而是基于LINQ查询时,就会出现问题。
下面是代码示例:

public class ComponentsController : ODataController
{
....
  [EnableQuery]
  public IQueryable<Component> GetChilds([FromODataUri] string key)
  {
    var id = db.Components.First(c => c.Id == key).Identity;
    return db.ChildComponents.Where(cc => cc.Identity == id).Select(cc => cc.Component);
  }

您不能期望为请求调用
GetChilds(string)

api/Components('XYZ')?$expand=Childs
否则,对于上述请求,应该在控制器is
Get(string)
中调用实方法

另一方面,
GetChilds(string)
仅用于
api/Components('XYZ')/Childs


我编写了一个示例项目进行测试。您可以参考它来了解odata的路由。谢谢。

奇怪的是$expand已经被支持了。请您展示元数据好吗?@SamXu我已经使用mvc api添加了metadatause。。。。你怎么吃的,安格拉斯?(什么叫GetChilds…)。。。。js是什么样子的。@Seabizkit,客户端站点不相关,因为我收到HTTP 500服务器错误
System.NotSupportedException:指定的类型成员'Childs'在LINQ to Entities中不受支持…
我不使用任何自动客户端-我自己键入查询url,只需在我的浏览器上测试它。@micmax93如果你这么说的话。。。。对我来说,api/Components('XYZ')?$expand=Childs就是你如何将它传递给api的,我明白你所说的。。。但我相信这是两者的结合,但你似乎最清楚。
api/Components('XYZ')?$expand=Childs