【问题标题】:How do i get an inner join in a WCF Data Service如何在 WCF 数据服务中获得内部联接
【发布时间】:2011-02-02 18:54:59
【问题描述】:

假设我有 2 个表,table1 和 table2,有一个共享键“id”

如果我想使用 sql 对这两个表进行内部连接,我会这样做

select id, x, y, z
from table1
inner join table2
on table1.id = table2.id

我现在在表 1 中获得仅在表 2 中相交的行。

如何获得 wcf 数据服务/odata linq 语法中的等效项?

我期待这样的事情:

var q = (from t in svc.Table1.Expand("Table2")
    where t.Table2.Any()
    select t) as DataServiceQuery<Table1>;

但这让我对Any() 有了一个例外。
我试过.Join 也不支持。 我试过 .Count 也失败了。
.Intersect 看起来只需要另一个可枚举,所以这看起来不像我想要的......

我想我错过了一些非常明显或简单的东西......

编辑:这似乎是这个How do I use OData Expand like a SQL join?的副本

【问题讨论】:

标签: linq odata wcf-data-services


【解决方案1】:

看看这类question的答案。当前版本的 WCF 数据服务 (OData) 不支持连接,即使您的基础数据合同支持(例如,如果您在 Entity Framework 4 之上进行分层)。

【讨论】:

  • 目前看来大部分正确答案是“你不能”。那好吧。从 Vitek 的回答看来,未来至少有一些希望。
  • 我自己偶然发现了这个。什么样的恶梦。在没有JOIN 支持的情况下,这段代码是如何发布的?我可以哭了。
【解决方案2】:

WCF 数据服务的最新版本现在包括任何/全部支持。见What's New in WCF Data Services 5.0

【讨论】:

    【解决方案3】:

    目前 OData 协议(以及因此的 WCF 数据服务)不支持任何/所有操作。它也不支持任意连接,尽管一些连接可以表示为导航。 当前不支持您的查询,但我们正在考虑添加对任何/所有操作的支持。如果可以满足您的需求,请查看此提案: http://www.odata.org/blog/support-for-any-and-all

    【讨论】:

    • 这可能会有所帮助。我认为这不会涵盖我需要的所有东西,但它会涵盖我正在尝试做的一些事情。
    【解决方案4】:

    WCF 在这里发挥作用吗?要链接两个表/列表中的两个对象,我会这样做:

    var result = 
      from o1 in Table1
      join o2 in Table2 on o2.id equals o1.id
    

    【讨论】:

    • 我会添加更多细节。这是通过 wcf 数据服务实现的,它不支持 linq 中的所有内容。
    • 我不知道它是否取决于 OData 实现/配置,但我在尝试与 OData 进行连接时遇到了麻烦。要么不支持开箱即用,要么根本不支持。
    猜你喜欢
    • 2023-03-05
    • 2016-10-27
    • 2011-10-18
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多