使用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;