如何在WCF数据服务中获得内部联接

时间:2011-02-02 18:55:00

标签: linq odata wcf-data-services

假设我有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?

的重复

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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