从一对多关系中检索实体 (Odata)

Retrieving entities from a one to many relationship (Odata)

总结一下,我有两个主表:CompanyEmployees,它们之间是一对多的关系:employees belongs到一家公司。

Company 实体有一个名为 Employees 的 属性,它允许获取属于特定 Company 的员工。

如果我在浏览器中输入这个 URL,它会起作用,我会得到一个员工列表:

http://domain.com/DynamicsNAV80/OData/Company('whatever')/Employees

现在,我想使用 Linq 查询检索员工,我该怎么做?

我试过这个:

var dataServiceQuery = (DataServiceQuery<Company>)from comp in _context.Company.Expand(comp => comp.WhseEmployee)
                                                  where comp.Name == "whatever"
                                                  select comp.WhseEmployee;

但这对我不起作用。

那个查询 return 是什么,是错误还是不是您要查找的数据?我不确定查询 Odata 的语法是否不同,但这是我在其他任何时候都会做的。

              var dataServiceQuery = from comp in _context.Company.Expand("WhseEmployees")
                                     where comp.Name == "whatever"
                                     select comp;

您使用的是哪个版本的 OData?

如果是V4。您可以尝试以下代码。

var employees = _context.Company.ByKey("whatever").WhseEmployee;

请参考Client Delayed Query

如果是V3。需要先查询公司,然后使用LoadProperty发送请求到/Company('whatever')/WsheEmployee.

var company = _context.Company.Where(c=>c.Name="whatever").First();
dsc.LoadProperty(company, "WsheEmployee");

我终于可以使用这个查询了:

    var dataServiceQuery = (DataServiceQuery<WhseEmployee>)_context.Company.Where(c => c.Name == companyName)
                                                                           .SelectMany(c => c.WhseEmployee);