gpt4 book ai didi

c# - 使用 linq 加入 OData 服务的替代方法

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:07 25 4
gpt4 key购买 nike

我想在 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 协议(protocol)不支持 JOIN,但您仍然可以在单个请求中检索相关数据。以下是 OData.org 中的几个示例:

http://services.odata.org/OData/OData.svc/Categories(1)/ $链接/产品

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

http://services.odata.org/OData/OData.svc/Products(1)/ $链接/类别

标识与产品 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;

关于c# - 使用 linq 加入 OData 服务的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com