使用linq在OData服务中交替连接

我想在LINQ中加入两个表,我的查询有点像

SELECT mfg.MfgName FROM MasterProductStaging AS mps INNER JOIN Mfg AS mfg ON mps.MfgID = mfg.MfgID WHERE (mps.MasterProductStagingID = 345345) 

现在在LINQ中,我使用两个不同的查询来解决这个问题

  var test = (from d in DataContext.MasterProductStagings where d.MasterProductStagingID == Convert.ToInt32(Request.QueryString["MPSID"]) select d.MfgID).FirstOrDefault(); var data = (from d in DataContext.Mfgs where d.MfgID == test.ToString() select d).FirstOrDefault(); 

这些表在emdx模型中没有任何关系。 现在我在一个查询中获取所需的数据。

OData协议不支持JOIN,但您仍可以在单个请求中检索相关数据。 以下是OData.org的几个例子:

http://services.odata.org/OData/OData.svc/Categories(1)/ $ links / Products

标识与类别1相关的产品集。由关联服务元数据文档中“类别”实体类型上名为“产品”的导航属性描述。

http://services.odata.org/OData/OData.svc/Products(1)/ $ links / Category

标识与产品1相关的类别。由关联服务元数据文档中“产品”实体类型上名为“类别”的导航属性描述。

这应该为您提供OData链接的基本概念。 如果要将LINQ与OData一起使用,则应首先使用WCF数据服务创建代理类。 然后你可以LINQ查询,但要记住它们比entity framework更有限 – 例如它们不支持JOIN,但支持另一种检索相关数据的方法,例如:

 var ordersQuery = from o in context.Orders.Expand("Order_Details") where o.CustomerID == "ALFKI" select o;