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

时间:2015-03-12 10:30:25

标签: c# .net linq odata one-to-many

总结一下,我有两个主要表:公司员工,他们之间有一对多的关系:员工属于公司。

公司实体有一个名为Employees的财产,允许雇用属于特定公司的员工。

如果我在浏览器中输入此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;

但这不适合我。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您使用的是哪个版本的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");

答案 2 :(得分:0)

最后我可以使用此查询:

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