C# 从一对多关系(Odata)检索实体
总而言之,我有两个主表:公司和员工,它们之间有一对多的关系:员工属于公司 公司实体有一个名为Employees的属性,允许获取属于特定公司的员工 如果我在浏览器中键入此URL,它将起作用,我将得到一个员工列表: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<
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
,我修改了一些名字以便更好地解释它。