1

我想在 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这些表在模型中没有任何关系。现在我要在单个查询中获取我想要的数据。

4

1 回答 1

4

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 查询,但请记住,它们比实体框架更受限制 - 例如,它们不支持 JOIN,但支持检索相关数据的另一种方式,例如:

var ordersQuery = from o in context.Orders.Expand("Order_Details")
    where o.CustomerID == "ALFKI" 
    select o;
于 2013-10-09T08:58:14.537 回答