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

标签 c# sql linq entity-framework 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 协议(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/

相关文章:

c# - 将泛型 IEnumerable<T> 转换为 IEnumerable<KeyValuePair> (C#)

java - sql 选择并插入已连接的项目,但我想全部显示

php - SQL 语法错误。 Mysql无法插入数据

java - 如何根据用户的角色过滤 SQL 行?

c# - Linq to Sql 中的数据类型转换

c# - LINQ 设计好奇心 : Skip/Take vs. SkipWhile/TakeWhile

c# - JIT 是否生成了错误的代码

mysql - 复合 Mysql join sql 中每组所需的最大 n

linq - WCF 数据服务、DTO 和 Entity Framework : The argument to DbIsNullExpression must refer to a primitive, 枚举或引用类型

asp.net - Linq 和 EF4,内连接条件语句