Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从一对多关系(Odata)检索实体_C#_.net_Linq_Odata_One To Many - Fatal编程技术网

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

C# 从一对多关系(Odata)检索实体,c#,.net,linq,odata,one-to-many,C#,.net,Linq,Odata,One To Many,总而言之,我有两个主表:公司和员工,它们之间有一对多的关系:员工属于公司 公司实体有一个名为Employees的属性,允许获取属于特定公司的员工 如果我在浏览器中键入此URL,它将起作用,我将得到一个员工列表: http://domain.com/DynamicsNAV80/OData/Company('whatever')/Employees 现在,我想使用Linq查询检索员工,我该怎么做 我试过这个: var dataServiceQuery = (DataServiceQuery<

总而言之,我有两个主表:公司员工,它们之间有一对多的关系:员工属于公司

公司实体有一个名为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;
var-dataServiceQuery=(dataServiceQuery)来自_context.Company.Expand(comp=>comp.WhseEmployee)中的comp
其中comp.Name==“无论什么”
选择comp.WhseEmployee;

但这对我不起作用。

该查询返回的是什么,是错误还是不是您要查找的数据?我不确定查询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;
请参阅

如果是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);
var-dataServiceQuery=(dataServiceQuery)\u context.Company.Where(c=>c.Name==companyName)
.SelectMany(c=>c.whsee员工);

该查询返回异常(“选择的方法不受支持”)。我只想得到一家公司的员工,我需要这个ODataURL的等效linq查询:
http://domain.com/DynamicsNAV80/OData/Company('whatever')/Employees
查看更新后的查询,让我知道这对您有什么帮助。也许您不信任我,但员工实体没有CompanyId属性,而且公司没有员工ID的财产。而且,这是一对多的关系,不是一对一。我不知道这种关系是如何建立起来的。但是这个URL对我来说是有用的,它与
/Company('whatever')/Employees
这并不是说我不信任你,没有你的表格,我就在黑暗中刺伤你。它们必须有一个相关字段,或者可能还有一个额外的关系表,才能有一对多的关系。我从你的信息中推测,每家(1)公司都可能有(多)名员工。如果Employees表不包含与公司相关的字段,那么请查找类似CompanyEmployees@Rick的关系表这里是关于表和数据库的一些信息的快照。在这里,我说其中一个表的名称是Employee,但是是WsheEmployee。正确的URL不是
/Company('whatever')/Employees
,而是
/Company('whatever')/wsheemployeee
,我修改了一些名字以便更好地解释它。