How do i get an inner join in a WCF Data Service

五迷三道 提交于 2019-12-01 12:17:48

问题


Lets say i have 2 tables, table1 and table2, with a shared key "id"

if i want an inner join of those two tables using sql, i'd do something like

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

I now get rows in table 1 that only intersect occur in table 2.

how do i get the equivalent in wcf data service/odata linq syntax?

i'm expecting something like:

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

but that gets me an exception about Any().
I've tried .Join and that isn't supported either. I've tried .Count and that fails too.
.Intersect looks like it only takes another enumerable, so that doesn't look like what i want...

i think i'm missing something really obvious or simple...

Edit: this appears to be a dup of this How do I use OData Expand like a SQL join?


回答1:


Take a look at the answers to this type of question. The current version of WCF Data Services (OData) does not support joins even if your underlying data contract does (i.e. if you're layering on top of Entity Framework 4 for instance).




回答2:


The more recent releases of WCF Data Services now include Any/All support. See What's New in WCF Data Services 5.0




回答3:


Currently the OData protocol (and thus WCF Data Services) doesn't support any/all operations. It also doesn't support arbitrary joins, although some joins can be expressed as navigations. Your query is currently not supported, but we're looking into adding support for the any/all operations. Take a look at this proposal if that would fulfill your needs: http://www.odata.org/blog/support-for-any-and-all




回答4:


Is WCF in play here? To link two objects from two tables/lists, I'd do this:

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


来源:https://stackoverflow.com/questions/4878567/how-do-i-get-an-inner-join-in-a-wcf-data-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!